Git ブランチ | git checkout
git checkout コマンド
git checkout は、git branch コマンドで作成されたブランチ間を移動するコマンドである。ブランチをチェックアウトすると、作業ディレクトリ内のファイルはそのブランチに保存されているバージョンへ更新され、その後の新しいコミットはすべてそのブランチに記録される。このコマンドは、作業する開発ラインを選択する手段だと考えられる。
前の章では、過去のコミットを見る場合の git checkout の使い方を説明した。ブランチのチェックアウトも、指定したブランチまたはバージョンに一致するよう作業ディレクトリが更新される点では似ている。ただし、作業ディレクトリに残っている変更がプロジェクト履歴に保存される可能性がある点が異なる。つまり、このコマンドは読み取り専用操作ではない。
使い方
git checkout <existing-branch>
git branch コマンドで作成したブランチをチェックアウトするコマンドである。このコマンドを実行すると、<existing-branch> が現在のブランチになり、それに一致するよう作業ディレクトリが更新される。
git checkout -b <new-branch>
新しいブランチ <new-branch> を作成し、すぐにチェックアウトするコマンドである。-b フラグは、git branch <new-branch> を実行してから git checkout <new-branch> を実行するための便利なショートカットである。
git checkout -b <new-branch> <existing-branch>
上記のコマンドと同じ機能だが、現在のブランチではなく <existing-branch> を新しいブランチの起点にする。
補足説明
git checkout は git branch と一緒によく使われるコマンドである。新機能の開発を始める場合は、git branch でブランチを作成し、git checkout でそれをチェックアウトする。1 つのリポジトリ内で git checkout を使って機能を切り替えることで、複数の機能開発を並行して進められる。
Git チュートリアル: git checkout を使って 1 つのリポジトリ内で複数の機能を切り替える
個別の機能ごとに専用ブランチを用意することで、SVN を基盤とした従来のワークフローとは大きく異なる開発手法を使える。既存機能を壊す心配を抑えながら実験的な開発をしやすくなり、関係のない複数の機能開発を同時に進めることもできる。さらに、ブランチの導入によってさまざまな共同作業ワークフローを採用しやすくなる。
Detached HEAD
git checkout の 3 つの使い方を学んだので、ここで前の章でも触れた detached HEAD について説明しておく。
前述のとおり、HEAD は Git では現在のスナップショットへの参照を意味する。git checkout を実行すると、HEAD は指定したブランチまたはコミットへ移動する。移動先がブランチであれば問題ないが、コミットを直接チェックアウトした場合は detached HEAD 状態になる。
Git チュートリアル: Detached HEAD
これは、この状態で行われた作業がプロジェクト内の他の開発作業から分離されていることを警告している。detached HEAD 状態で機能開発を始め、その作業を指すブランチを作成しないまま別のブランチをチェックアウトすると、その機能を参照できなくなる可能性がある。
Git チュートリアル: Detached HEAD 状態
重要なのは、開発作業は常にブランチ上で行うべきであり、detached HEAD 上で行うべきではないという点である。これにより、コミットへの参照方法を常に確保できる。ただし、過去のコミットを確認するだけであれば、detached HEAD 状態かどうかを気にする必要はない。
使用例
次の例は、Git ブランチの基本的な使い方を示している。新機能の開発作業を始める場合は、専用ブランチを作成してそれに切り替える。
git branch new-feature
git checkout new-feature
こうすることで、前の章で説明したように新しいスナップショットをコミットできる。
# Edit some files
git add <file>
git commit -m "Started work on a new feature"
# Repeat
コミットはすべて master ブランチとは独立した new-feature ブランチに記録される。この状態では何度でもコミットでき、その間は他のブランチを気にする必要がない。「公式」コードベースでの作業に戻るには、単に master ブランチをチェックアウトすればよい。
git checkout master
このコマンドを実行すると、機能開発を始める前のリポジトリの状態が表示される。ここから、完成した機能をマージしたり、新しいブランチを作成したり、別の機能を始めたり、公式コードベースでの作業を続けたりできる。