SlideShare a Scribd company logo
1 of 42
Download to read offline
Gitのよく使うコマンド
よく使うコマンド

init add commit push clone     branch
checkout fetch merge rebase    pull
status rm reset remote tag    log
mergetool revert


               19個
init
        現在の場所にリポジトリを作成する

mkdir foobar; cd foobar; git init
add
        対象をバージョン管理に追加する

ワイルドカードを使う
git add **/*.php

強制的に追加
git add -f foobar.php

部分的に追加
git add -i foobar.php
commit
        ローカルブランチへの反映
git commit

全部追加した上でコミットする(非推奨)
git commit -a

直前のコミットにコミットする
git commit --amend
commit
      ローカルブランチへの反映
コミット時に起動するエディタは次の環境変数で指
定する
● GIT_EDITOR
● EDITOR
e.g.) export EDITOR=vim

エディタを起動せずにコミットする
git commit -m "message"
push
           リモートサーバへの反映
git push <remotename> <refspec>

ローカルブランチと同名のブランチをリモート上に
作成する
git push <remote> <localbranch>

別名でpushする
git push <remote> <localbranch>:<remotebranch>
<refspec>は<localbranch>:<remotebranch>
push
          リモートサーバへの反映
リモートブランチを削除する
git push --delete <remote> <branchname>
git push <remote> :<branchname>

プッシュしたリモートブランチをトラッキングする
git push -u <remote> <branchname>

強制的にプッシュ
git push -f <remote> <branchname>
push
          リモートサーバへの反映
タグをプッシュする
git push --tags <remote>

リモートサーバのタグを削除する
git push --delete <remote> tag_name
git push <remote> :tag_name
push
                注意事項
git push(remoteとブランチの指定なし)はトラッキ
ングしているローカルブランチを全てプッシュしてし
まうので、とても危険です

デフォルトではcurrent branchだけプッシュするよう
にする設定で安全運用
git config --global push.default upstream
clone
           リポジトリのコピーを作成する
sshを利用
git clone ssh://[user@]host[:port]/path/to/repo.git/
git clone [user@]host:path/to/repo.git/

httpsを利用
git clone http[s]://host[:port]/path/to/repo.git/

ローカル
git clone [file://]/path/to/repo.git/
branch
    ローカルブランチを作成/削除する
ローカルブランチの一覧
git branch

リモートブランチの一覧
git branch -r <remote>

全てのブランチの一覧
git branch -a
branch
    ローカルブランチを作成/削除する
ローカルブランチの作成
git branch <branchname>

ローカルブランチの削除
git branch -d <branchname>
git branch -D <branchname>

リモートブランチの削除
git branch -r -d <remote>/<branchname>
branch
    ローカルブランチを作成/削除する
ブランチの移動(名前変更)
git -m <oldbranch> <newbranch>
git -M <oldbranch> <newbranch>

トラッキング先を設定する
git branch --set-upstream <local_branch>
<remote_branch>
これをするとgit push/pullの時にリモートブランチ名
を指定しなくても、設定したブランチに対して実行し
てくれます。
checkout
               ブランチを取得する
git checkout <branch>

ブランチを作成してチェックアウト
git checkout -b <newbranch> [<startpoint>]

リモートブランチのトラッキングブランチを作成してチェックアウト
git checkout -t <remote>/<branch>

コミット前の変更を取り消す
git checkout <path> ...
fetch
         リモートの状態を更新する
git fetch <remote>

全てのリモートブランチを更新する
git fetch --all

更新後に、リモートサーバ上に存在しないリモート
ブランチを削除する
git fetch ( -p | --prune )
merge
            ブランチを取り込む
git merge <branch>

fast-forwardしない
git merge --no-ff <branch>

マージのログを1つに圧縮する
git merge --squash <branch>
merge
          fast-forwardとは
通常はこうなる1つのコミットとして扱われる
      A---B---C topic
     /         
D---E---F---G---H master

fast-forwardではログを先頭にくっつけてマージす
る
       A---B---C topic
      /         
D---E---F---G---A'---B'---C' master
merge
         fast-forwardとは
topicのなかにmasterの変更が全て入っている場
合、これをfast-forwardな関係と言います。
      C---D---E topic
     /
A---B master

この状態でマージを行うと、次のようになります。
A---B---C---D---E master, topic
merge
         fast-forwardとは
逆にtopicのなかにmasterの変更が全て入っていない場合、
fast-forwardな関係にはなりません。
       C---D---E topic
     /
A---B---F---G master

この状態でマージを行うと、コミットマージが作られて、次のよう
になります。
       C---D---E topic
     /          
A---B---F---G---H master
# SVNはこの形ですね
merge
                      squashとは
squashはマージですが、通常のコミットとして扱います。
       C---D---E topic
     /
A---B---F---G master

例えば上記の状態で、git merge --squash topicとすると下記の
状態になります

    C---D---E topic
     /
A---B-------------F master
FにはC, D, Eの変更が含まれています
merge
     fast-forwardかno-ffかsquashか
リポジトリの運用ポリシーにより使い分ける

ffの場合ログが汚染され、機能追加やバグ修正のコミットがどこ
からどこまでなのか分かりづらくなるたね、個人的no-ffだけで
運用して問題ないと思っています。

A successful Git branching model でもno-ffが推奨されてるよ!
邦訳: http://goo.gl/xFd5g
rebase
                 ブランチを統合する
git rebase <branch>

次の状態が
       C---D---E topic
     /
A---B---F---G master

こうなります
              C'---D'---E' topic
             /
A---B---F---G master
rebase
         コンフリクトが発生したら
rebase中にコンフリクトが発生した場合、rebaseが中断され、コ
ンフリクト解決フェイズになります。
解決処理後、rebaseを再開するか中断するかそのコミットをス
キップするか選択します。

マージコミットを作成して再開
git rebase --continue
中断
git rebase --abort
今のパッチをスキップして再開
git rebase --skip
rebase
                 履歴を改竄する
過去のコミットを分割したりまとめたりできます。
基本的にはサーバにプッシュする前に、ログを綺麗にするため
に使います。

rebase -i <commit>

サーバにプッシュ後は、他のブランチのマージやリベースの関
係が崩れる恐れがあるので、絶対に行ってはいけません
pull
                 fetch & merge
git pull [<remote>] [<branch>]

次の2つは等価です
git pull origin master
git fetch origin && git merge origin/master

次の設定をしていると、git pullだけで<remote>と<branch>
を自動解決してくれます。
git branch --set-upstream <localbranch>
<remote>/<remoptebranch>
pull
           fetch & rebase
mergeの代わりにrebaseを使うこともできます。
git pull --rebase <remote> <branch>

git pull --rebaseは1.7.2で導入されたもので、比較
的新しいオプションです。

今まではmergeしか選択できませんでしたが、これ
にはいくつかの問題がありました。
pull
     mergeで処理される問題
mergeとrebaseの違いは先程の説明通りです。

pullを行う目的は、リモートブランチの変更をトラッ
キングしているローカルブランチに取り込むことし
かありません。
つまりはローカルブランチの更新です。

ただ追跡しているだけなのに、マージコミットが作
成されると、タイムライン上はリモートブランチと
ローカルブランチは別物扱いとなってしまいます。
pull
   いちいち--rebaseを打つのがメンドイ
メンドイのでデフォルトでrebaseを使うように設定します。

<branch>に対するpullでは--rebaseを行う
git config branch.<branch>.rebase true

トラッキングブランチの作成時の上記の設定を自動で付与する。
git config --global branch.autosetuprebase always

1.7.9以降の場合は次の設定も使える
git config --global pull.rebase true
この場合、git config branch.<branch>.rebase.falseとすると、
<branch>に対するpullだけはmergeで行われる。
status
     現在のステージングの状態を見る
git status

慣れたら
git status -sb
rm
                削除する
git rm <file>

ディレクトリを削除する
git rm -r <dir>

ステージングから削除する
git rm --cached <file>
reset
             現在から過去を取り消す
直前のコミットをステージングの状態まで戻す
git reset --soft HEAD~

直前のコミットを完全に戻す
git reset [--mixed] HEAD~

直前のコミットを完全に戻して、untrackなものは削除する
git reset --hard HEAD~

<commit>まで戻す
git reset ( --soft | --mixed | --hard ) <commit>
reset
            現在から過去を取り消す
直前のマージを取り消す
git reset --hard ORIG_HEAD

インタラクティブモードで部分的に戻す
git reset ( -p | --patch ) <commit>
remote
             リモートの管理
リモートの追加
remote add <name> <url>

リモートの削除
remote rm <name>

リモートサーバ上に存在しないリモートブランチの削除
remote prune <name>
tag
                  タグの管理
タグの作成
git tag <tagname> [<commit>]

タグの削除
git tag -d <tagname>

署名付きタグの作成
git tag ( -s | -u <key_id> ) <tagname>
log
            ログを見る
デフォルト
git log

ハッシュと派生したブランチを見やすくしたい
git log --oneline --decorate

変更されたファイルとパッチも表示しちゃう
git log --stat
git log --patch-with-stat
mergetool
   ツールを利用したコンフリクトの解決
git mergetool

git config --global merge.toolで設定したツールで
3wayマージを行う。
revert
           過去コミットを取り消す
git revert <commit>

過去のコミットを取り消すために、逆マージをしま
す。
resetやrebase -iと違い、歴史を改竄せずに、取り
消したというコミットを残します。
これでもまだほんの一部
        1.7.11.3時点でのコマンド数: 152
add diff lost-found prune-packed shortlog add--interactive diff-files ls-files pull show am
diff-index ls-remote push show-branch annotate diff-tree ls-tree quiltimport show-index
apply difftool mailinfo read-tree show-ref archive difftool--helper mailsplit rebase stage
bisect fast-export merge receive-pack stash bisect--helper fast-import merge-base reflog
status blame fetch merge-file relink stripspace branch fetch-pack merge-index remote
submodule bundle filter-branch merge-octopus remote-ext svn cat-file fmt-merge-msg
merge-one-file remote-fd symbolic-ref check-attr for-each-ref merge-ours remote-ftp tag
check-ref-format format-patch merge-recursive remote-ftps tar-tree checkout fsck merge-
resolve remote-http unpack-file checkout-index fsck-objects merge-subtree remote-https
unpack-objects cherry gc merge-tree remote-testgit update-index cherry-pick get-tar-
commit-id mergetool repack update-ref clean grep mktag replace update-server-info
clone hash-object mktree repo-config upload-archive column help mv request-pull
upload-pack commit http-backend name-rev rerere var commit-tree http-fetch notes
reset verify-pack config http-push p4 rev-list verify-tag count-objects imap-send pack-
objects rev-parse web--browse credential-cache index-pack pack-redundant revert
whatchanged credential-cache--daemon init pack-refs rm write-tree credential-store init-
db patch-id send-pack daemon instaweb peek-remote sh-i18n--envsubst describe log
prune shell
ネットで読めるいいもの

ProGit
http://git-scm.com/book/ja

Gitをボトムアップから理解する
http://goo.gl/1qPB4

A successful Git branching model
http://goo.gl/xFd5g
書籍

入門Git
http://amzn.to/N8YyXQ

入門git
http://amzn.to/SevHoh

Gitによるバージョン管理
http://amzn.to/OMG8Zo
      ._
       \ヽ, ,、
        `''|/ノ
         .|
     _   |
     \`ヽ、|
      \, V
         `L,,_
         |ヽ、)  ,、
        /    ヽYノ
       /    r''ヽ、.|
      |     `ー-ヽ|ヮ
      |       `|
      |.        |
      ヽ、      |
        ヽ____ノ
        /_ノ ' ヽ_\
      /(≡)   (≡)\
     /::::::⌒(__人__)⌒::::: \
     |     |r┬-|     |
     \      `ー'´     /
     /          \
     (  |          |  )
     \|    э    |/
       (    ,,,,    ,ノ
       \  、(U)ノ ノ
         \/  /            ┼ヽ  -|r‐、. レ |
         /  /\            d⌒) ./| _ノ  __ノ

More Related Content

What's hot

はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーSaeko Yamamoto
 
はじめようGit
はじめようGitはじめようGit
はじめようGittechscore
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?naoki koyama
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理H2O Space. Co., Ltd.
 
5分で分かるgitのrefspec
5分で分かるgitのrefspec5分で分かるgitのrefspec
5分で分かるgitのrefspecikdysfm
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩Ayana Yokota
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CDYuta Matsumura
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドktateish
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことRecruit Lifestyle Co., Ltd.
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea 急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea Motonori Shindo
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 

What's hot (20)

はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 
はじめようGit
はじめようGitはじめようGit
はじめようGit
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
5分で分かるgitのrefspec
5分で分かるgitのrefspec5分で分かるgitのrefspec
5分で分かるgitのrefspec
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CD
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea 急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 

Similar to Gitのよく使うコマンド

Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルComputational Materials Science Initiative
 
RedmineとGitとスクラム
RedmineとGitとスクラムRedmineとGitとスクラム
RedmineとGitとスクラムTakashi Okamoto
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩Shin Yoshida
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんかAtsuhiro Takiguchi
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Yoko TAMADA
 
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbGit-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbJun Fukaya
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアルRyo Igarashi
 
いいこんぶGitマニュアル
いいこんぶGitマニュアルいいこんぶGitマニュアル
いいこんぶGitマニュアルKaito Yuuki
 
SVN経験者のためのGIT入門
SVN経験者のためのGIT入門SVN経験者のためのGIT入門
SVN経験者のためのGIT入門AimingStudy
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Teloo
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回kinme modoki
 
20120324 git training
20120324 git training20120324 git training
20120324 git trainingTakeshi AKIMA
 
Git 入門
Git 入門Git 入門
Git 入門y-uti
 
GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境Kazuhiro Nishiyama
 

Similar to Gitのよく使うコマンド (20)

Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
Git (運用編)
Git (運用編)Git (運用編)
Git (運用編)
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
RedmineとGitとスクラム
RedmineとGitとスクラムRedmineとGitとスクラム
RedmineとGitとスクラム
 
Git 勉強会
Git 勉強会Git 勉強会
Git 勉強会
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんか
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)
 
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbGit-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rb
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 
いいこんぶGitマニュアル
いいこんぶGitマニュアルいいこんぶGitマニュアル
いいこんぶGitマニュアル
 
JTF 2013
JTF 2013JTF 2013
JTF 2013
 
Capistrano
CapistranoCapistrano
Capistrano
 
SVN経験者のためのGIT入門
SVN経験者のためのGIT入門SVN経験者のためのGIT入門
SVN経験者のためのGIT入門
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回
 
20120324 git training
20120324 git training20120324 git training
20120324 git training
 
Git 入門
Git 入門Git 入門
Git 入門
 
Mincs 日本語版
Mincs 日本語版Mincs 日本語版
Mincs 日本語版
 
GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (10)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

Gitのよく使うコマンド

  • 2. よく使うコマンド init add commit push clone branch checkout fetch merge rebase pull status rm reset remote tag log mergetool revert 19個
  • 3. init 現在の場所にリポジトリを作成する mkdir foobar; cd foobar; git init
  • 4. add 対象をバージョン管理に追加する ワイルドカードを使う git add **/*.php 強制的に追加 git add -f foobar.php 部分的に追加 git add -i foobar.php
  • 5. commit ローカルブランチへの反映 git commit 全部追加した上でコミットする(非推奨) git commit -a 直前のコミットにコミットする git commit --amend
  • 6. commit ローカルブランチへの反映 コミット時に起動するエディタは次の環境変数で指 定する ● GIT_EDITOR ● EDITOR e.g.) export EDITOR=vim エディタを起動せずにコミットする git commit -m "message"
  • 7. push リモートサーバへの反映 git push <remotename> <refspec> ローカルブランチと同名のブランチをリモート上に 作成する git push <remote> <localbranch> 別名でpushする git push <remote> <localbranch>:<remotebranch> <refspec>は<localbranch>:<remotebranch>
  • 8. push リモートサーバへの反映 リモートブランチを削除する git push --delete <remote> <branchname> git push <remote> :<branchname> プッシュしたリモートブランチをトラッキングする git push -u <remote> <branchname> 強制的にプッシュ git push -f <remote> <branchname>
  • 9. push リモートサーバへの反映 タグをプッシュする git push --tags <remote> リモートサーバのタグを削除する git push --delete <remote> tag_name git push <remote> :tag_name
  • 10. push 注意事項 git push(remoteとブランチの指定なし)はトラッキ ングしているローカルブランチを全てプッシュしてし まうので、とても危険です デフォルトではcurrent branchだけプッシュするよう にする設定で安全運用 git config --global push.default upstream
  • 11. clone リポジトリのコピーを作成する sshを利用 git clone ssh://[user@]host[:port]/path/to/repo.git/ git clone [user@]host:path/to/repo.git/ httpsを利用 git clone http[s]://host[:port]/path/to/repo.git/ ローカル git clone [file://]/path/to/repo.git/
  • 12. branch ローカルブランチを作成/削除する ローカルブランチの一覧 git branch リモートブランチの一覧 git branch -r <remote> 全てのブランチの一覧 git branch -a
  • 13. branch ローカルブランチを作成/削除する ローカルブランチの作成 git branch <branchname> ローカルブランチの削除 git branch -d <branchname> git branch -D <branchname> リモートブランチの削除 git branch -r -d <remote>/<branchname>
  • 14. branch ローカルブランチを作成/削除する ブランチの移動(名前変更) git -m <oldbranch> <newbranch> git -M <oldbranch> <newbranch> トラッキング先を設定する git branch --set-upstream <local_branch> <remote_branch> これをするとgit push/pullの時にリモートブランチ名 を指定しなくても、設定したブランチに対して実行し てくれます。
  • 15. checkout ブランチを取得する git checkout <branch> ブランチを作成してチェックアウト git checkout -b <newbranch> [<startpoint>] リモートブランチのトラッキングブランチを作成してチェックアウト git checkout -t <remote>/<branch> コミット前の変更を取り消す git checkout <path> ...
  • 16. fetch リモートの状態を更新する git fetch <remote> 全てのリモートブランチを更新する git fetch --all 更新後に、リモートサーバ上に存在しないリモート ブランチを削除する git fetch ( -p | --prune )
  • 17. merge ブランチを取り込む git merge <branch> fast-forwardしない git merge --no-ff <branch> マージのログを1つに圧縮する git merge --squash <branch>
  • 18. merge fast-forwardとは 通常はこうなる1つのコミットとして扱われる A---B---C topic / D---E---F---G---H master fast-forwardではログを先頭にくっつけてマージす る A---B---C topic / D---E---F---G---A'---B'---C' master
  • 19. merge fast-forwardとは topicのなかにmasterの変更が全て入っている場 合、これをfast-forwardな関係と言います。 C---D---E topic / A---B master この状態でマージを行うと、次のようになります。 A---B---C---D---E master, topic
  • 20. merge fast-forwardとは 逆にtopicのなかにmasterの変更が全て入っていない場合、 fast-forwardな関係にはなりません。 C---D---E topic / A---B---F---G master この状態でマージを行うと、コミットマージが作られて、次のよう になります。 C---D---E topic / A---B---F---G---H master # SVNはこの形ですね
  • 21. merge squashとは squashはマージですが、通常のコミットとして扱います。 C---D---E topic / A---B---F---G master 例えば上記の状態で、git merge --squash topicとすると下記の 状態になります C---D---E topic / A---B-------------F master FにはC, D, Eの変更が含まれています
  • 22. merge fast-forwardかno-ffかsquashか リポジトリの運用ポリシーにより使い分ける ffの場合ログが汚染され、機能追加やバグ修正のコミットがどこ からどこまでなのか分かりづらくなるたね、個人的no-ffだけで 運用して問題ないと思っています。 A successful Git branching model でもno-ffが推奨されてるよ! 邦訳: http://goo.gl/xFd5g
  • 23. rebase ブランチを統合する git rebase <branch> 次の状態が C---D---E topic / A---B---F---G master こうなります C'---D'---E' topic / A---B---F---G master
  • 24. rebase コンフリクトが発生したら rebase中にコンフリクトが発生した場合、rebaseが中断され、コ ンフリクト解決フェイズになります。 解決処理後、rebaseを再開するか中断するかそのコミットをス キップするか選択します。 マージコミットを作成して再開 git rebase --continue 中断 git rebase --abort 今のパッチをスキップして再開 git rebase --skip
  • 25. rebase 履歴を改竄する 過去のコミットを分割したりまとめたりできます。 基本的にはサーバにプッシュする前に、ログを綺麗にするため に使います。 rebase -i <commit> サーバにプッシュ後は、他のブランチのマージやリベースの関 係が崩れる恐れがあるので、絶対に行ってはいけません
  • 26. pull fetch & merge git pull [<remote>] [<branch>] 次の2つは等価です git pull origin master git fetch origin && git merge origin/master 次の設定をしていると、git pullだけで<remote>と<branch> を自動解決してくれます。 git branch --set-upstream <localbranch> <remote>/<remoptebranch>
  • 27. pull fetch & rebase mergeの代わりにrebaseを使うこともできます。 git pull --rebase <remote> <branch> git pull --rebaseは1.7.2で導入されたもので、比較 的新しいオプションです。 今まではmergeしか選択できませんでしたが、これ にはいくつかの問題がありました。
  • 28. pull mergeで処理される問題 mergeとrebaseの違いは先程の説明通りです。 pullを行う目的は、リモートブランチの変更をトラッ キングしているローカルブランチに取り込むことし かありません。 つまりはローカルブランチの更新です。 ただ追跡しているだけなのに、マージコミットが作 成されると、タイムライン上はリモートブランチと ローカルブランチは別物扱いとなってしまいます。
  • 29. pull いちいち--rebaseを打つのがメンドイ メンドイのでデフォルトでrebaseを使うように設定します。 <branch>に対するpullでは--rebaseを行う git config branch.<branch>.rebase true トラッキングブランチの作成時の上記の設定を自動で付与する。 git config --global branch.autosetuprebase always 1.7.9以降の場合は次の設定も使える git config --global pull.rebase true この場合、git config branch.<branch>.rebase.falseとすると、 <branch>に対するpullだけはmergeで行われる。
  • 30. status 現在のステージングの状態を見る git status 慣れたら git status -sb
  • 31. rm 削除する git rm <file> ディレクトリを削除する git rm -r <dir> ステージングから削除する git rm --cached <file>
  • 32. reset 現在から過去を取り消す 直前のコミットをステージングの状態まで戻す git reset --soft HEAD~ 直前のコミットを完全に戻す git reset [--mixed] HEAD~ 直前のコミットを完全に戻して、untrackなものは削除する git reset --hard HEAD~ <commit>まで戻す git reset ( --soft | --mixed | --hard ) <commit>
  • 33. reset 現在から過去を取り消す 直前のマージを取り消す git reset --hard ORIG_HEAD インタラクティブモードで部分的に戻す git reset ( -p | --patch ) <commit>
  • 34. remote リモートの管理 リモートの追加 remote add <name> <url> リモートの削除 remote rm <name> リモートサーバ上に存在しないリモートブランチの削除 remote prune <name>
  • 35. tag タグの管理 タグの作成 git tag <tagname> [<commit>] タグの削除 git tag -d <tagname> 署名付きタグの作成 git tag ( -s | -u <key_id> ) <tagname>
  • 36. log ログを見る デフォルト git log ハッシュと派生したブランチを見やすくしたい git log --oneline --decorate 変更されたファイルとパッチも表示しちゃう git log --stat git log --patch-with-stat
  • 37. mergetool ツールを利用したコンフリクトの解決 git mergetool git config --global merge.toolで設定したツールで 3wayマージを行う。
  • 38. revert 過去コミットを取り消す git revert <commit> 過去のコミットを取り消すために、逆マージをしま す。 resetやrebase -iと違い、歴史を改竄せずに、取り 消したというコミットを残します。
  • 39. これでもまだほんの一部 1.7.11.3時点でのコマンド数: 152 add diff lost-found prune-packed shortlog add--interactive diff-files ls-files pull show am diff-index ls-remote push show-branch annotate diff-tree ls-tree quiltimport show-index apply difftool mailinfo read-tree show-ref archive difftool--helper mailsplit rebase stage bisect fast-export merge receive-pack stash bisect--helper fast-import merge-base reflog status blame fetch merge-file relink stripspace branch fetch-pack merge-index remote submodule bundle filter-branch merge-octopus remote-ext svn cat-file fmt-merge-msg merge-one-file remote-fd symbolic-ref check-attr for-each-ref merge-ours remote-ftp tag check-ref-format format-patch merge-recursive remote-ftps tar-tree checkout fsck merge- resolve remote-http unpack-file checkout-index fsck-objects merge-subtree remote-https unpack-objects cherry gc merge-tree remote-testgit update-index cherry-pick get-tar- commit-id mergetool repack update-ref clean grep mktag replace update-server-info clone hash-object mktree repo-config upload-archive column help mv request-pull upload-pack commit http-backend name-rev rerere var commit-tree http-fetch notes reset verify-pack config http-push p4 rev-list verify-tag count-objects imap-send pack- objects rev-parse web--browse credential-cache index-pack pack-redundant revert whatchanged credential-cache--daemon init pack-refs rm write-tree credential-store init- db patch-id send-pack daemon instaweb peek-remote sh-i18n--envsubst describe log prune shell
  • 42.       ._        \ヽ, ,、         `''|/ノ          .|      _   |      \`ヽ、|       \, V          `L,,_          |ヽ、)  ,、         /    ヽYノ        /    r''ヽ、.|       |     `ー-ヽ|ヮ       |       `|       |.        |       ヽ、      |         ヽ____ノ         /_ノ ' ヽ_\       /(≡)   (≡)\      /::::::⌒(__人__)⌒::::: \      |     |r┬-|     |      \      `ー'´     /      /          \      (  |          |  )      \|    э    |/        (    ,,,,    ,ノ        \  、(U)ノ ノ          \/  /            ┼ヽ  -|r‐、. レ |          /  /\            d⌒) ./| _ノ  __ノ