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>」ができない場合は、

  1. 変更を現在のブランチにコミットする
  2. git stash で変更を保存する
  3. 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

Tags of current page