git checkout 使い方
ブランチを切り替える
ブランチ experimental に切り替えるには
git checkout experimental
とする。
ブランチを作成して、そのブランチに切り替える
ブランチ experimental を作成すると同時に切り替えるには
git checkout -b experimental
とする。また、特定のコミット some-commit からブランチを作成するには
git checkout -b experimental some-commit
とする。
ファイルをあるコミット時の状態にする
FILE をインデックスの状態にする(インデックスに登録した後のコミットの変更を取り消す)には
git checkout FILE
とする。
また、FILE を最後のコミット時の状態にする、 タグ v1.0 の状態にするには、それぞれ
git checkout HEAD FILE
git checkout v1.0 FILE
とする。
ブランチ名とファイル名が同じ場合などは、「–」の後にファイル名を書く。
git checkout HEAD -- FILE
ファイルに対してあるコミット時の状態の一部だけを適用する
「-p」オプションをつけて、対象のファイルを指定する。
git checkout -p HEAD FILE_PATH
git checkout -p HEAD -- FILE_PATH
git checkout できない
error: You have local changes to 'test.txt'; cannot switch branches.
となって「git checkout <branch>」ができない場合は、
- 変更を現在のブランチにコミットする
- git stash で変更を保存する
- git checkout に -m オプションをつけてマージする
のどちらかを行ってcheck out する。
ワークツリーに対する変更をチェックアウトするときにマージする
現在のワークツリーに変更があって、チェックアウト後のブランチと競合する場合、 チェックアウトすることができない。 -m オプションをつけるとチェックアウトのときに変更をマージすることができる。
git checkout -m OTHER-BRANCH
存在するブランチを作りなおして、そのブランチにチェックアウトする
ブランチ BRANCH が存在しているときに、そのブランチを現在のブランチと同じにして、チェックアウトするには
git checkout -f BRANCH
とする。これは
git branch -f BRANCH
で作ったブランチにチェックアウトすることに対応する。
detached head にチェックアウトする
git checkout にコミットを指定するか、–detach オプションをつけると detached head にチェックアウトする。
git checkout HEAD^
git checkout --detach OTHER-BRANCH
head はブランチの先頭を指すのだが、detached head には対応するブランチがない。 別のブランチに移ってしまうとどこからも参照されなくなり、 そのうち git の garbage collection プロセスで削除されてしまう。
detached head からの変更が必要ならば
git checkout -b NEW-BRANCHE
のようにしてブランチを作っておく必要がある。
履歴のないブランチ (orphan branch) を作る
履歴のないブランチ (orphan branch) を作るには
git checkout --orphan ORPHAN-BRANCH
とする。チェックアウト前のブランチのファイルがインデックスに登録されているが、
git log
とすると履歴がなにもないブランチにいることがわかる。
リモート追跡ブランチからブランチを作成して、そのブランチに切り替える
git branch と同様に -t オプションをつけることで リモート追跡ブランチ(remote tracking branch)からブランチを作成し、 そのブランチにチェックアウトすることができる。
git checkout -t -b newbranch REMOTE/master
のように利用する。
参考
- man git-checkout