Git checkout
このページは、git checkout
コマンドについて説明し、使用例と極端な例を紹介します。Git では、「チェックアウト」はターゲット エンティティの異なるバージョン間の切り替えを意味します。git checkout
コマンドは、ファイル、コミット、ブランチの 3 つの異なるエンティティに対して実行されます。「チェックアウト」の定義に加えて git checkout
コマンドの実行を伝えるために「チェックアウトする」というフレーズも一般的に使用されます。変更点のやり直しトピックでは、git Checkout
を使用した過去のコミットの表示方法について確認しました。このドキュメントでは、ブランチに対するチェックアウト操作を主に取り上げます。
ブランチのチェックアウトは、指定されたブランチあるいはバージョンと一致するように作業ディレクトリが更新されるという点では過去のコミットのチェックアウトと似ていますが、作業ディレクトリに加えられた変更が残っている場合はそれがプロジェクト履歴に保存されるという点が異なります。すなわち、これは読み取り専用の操作ではありません。
ブランチのチェックアウト
git checkout
コマンドは、git branch
コマンドによって作成されたブランチ間を移動するコマンドです。ブランチをチェックアウトすることにより、作業ディレクトリ内のファイルがそのブランチに保存されているバージョンに更新され、その後すべての新規コミットはそのブランチに記録されます。このコマンドは、作業を行う開発ラインを選択する手段であると考えられます。
個々の機能に対してそれぞれ専用のブランチを設けることにより、SVN に基づく従来のワークフローとは大きく異なる手法が実現できます。これによって既存の機能を損なう懸念を生ずることなく新しい実験的開発を行うことが容易に可能となり、また関連のない複数の機能開発を同時に行うことも可能となりました。加えて、ブランチの導入によりいくつかのコラボレーション型ワークフローも容易に採用できるようになりました。
git checkout
コマンドは、git clone
と時折混同されることがあります。2 つのコマンドの違いは、git clone ではコードがリモート リポジトリからフェッチされるのに対し、git checkout ではローカル システムの既存コードのバージョンが切り替えられる点です。
関連資料
高度な Git ログ
ソリューションを見る
Bitbucket Cloud での Git の使用方法についてのチュートリアルです。
用途: 既存ブランチ
使用しているリポジトリに既存のブランチが含まれている場合、git checkout
を使用してそれらのブランチを切り替えられます。利用できるブランチと現在のブランチの名前を確認するには、git branch
を実行します。
$> git branch
main
another_branch
feature_inprogress_branch
$> git checkout feature_inprogress_branch
上の例は、git branch
コマンドを実行して利用可能ブランチのリストを表示し、指定されたブランチ (このケースでは feature_inprogress_branch
) に切り替える方法を示しています。
新しいブランチ
git checkout
コマンドは、Git ブランチと連携して機能します。git branch
コマンドは、新しいブランチの作成に使用できます。新しい機能を開始する場合、git branch new_branch
を使用して main
から新しいブランチを作成できます。git checkout new_branch
を使用して、作成したブランチに切り替えられます。また、git checkout
コマンドでは、-b
引数を使用できます。この引数は、新しいブランチを作成して即時にそれに切り替えるための便利な手段として使用されます。git checkout
を使用して機能を切り替えることにより、1 つのリポジトリで複数の機能を処理できます。
git checkout -b <new-branch>
上の例では、
が同時に作成されてチェックアウトされます。-b
オプションは、git branch
、git checkout
の順に実行する便利なフラグです。
git checkout -b <new-branch> <existing-branch>
デフォルトでは、git checkout -b
の new-branch
の基準は現在の HEAD
になります。オプションの追加のブランチ パラメータを git checkout
に渡せます。上記のサンプルでは、<
existing-branch>
が渡され、new-branch
の基準は現在の HEAD
ではなく、existing-branch
になります。
ブランチの切り替え
ブランチの切り替えは、いたってシンプルな操作です。以下を実行すると、HEAD
が
の先端をポイントします。
git checkout <branchname>
Git では、チェックアウト操作の履歴が reflog で追跡されます。git reflog
を実行して履歴を表示できます。
リモートブランチの git checkout
チームとのコラボレーションでは、リモートリポジトリの利用が一般的です。これらのリポジトリはホストされ、共有されている場合と、同僚のローカルコピーである場合があります。各リモートリポジトリに、固有のブランチのセットが含まれています。リモートブランチをチェックアウトするには、最初にブランチのコンテンツをフェッチする必要があります。
git fetch --all
Git の最新バージョンでは、リモートブランチをローカルブランチと同じようにチェックアウトできます。
git checkout <remotebranch>
Git の旧バージョンでは、新しいブランチを remote
に基づいて作成する必要があります。
git checkout -b <remotebranch> origin/<remotebranch>
また、新しいローカルブランチをチェックアウトして、リモートブランチの最後のコミットにリセットもできます。
git checkout -b <branchname>
git reset --hard origin/<branchname>
Detached Head とは
ブランチに対する git checkout
の 3 つの主な用途を確認したところで、「Detached Head
」状態について説明することが重要です。HEAD
は Git で現在のスナップショットを参照するために使用されます。内部では、git checkout
コマンドにより、HEAD
が指定されたブランチまたはコミットをポイントするようシンプルに更新されます。ブランチをポイントする場合、Git で問題は発生しませんが、コミットをチェックアウトすると「Detached Head
」状態に切り替わります。
これは、この状態で行われた作業はすべてプロジェクトの他の開発作業と「分離されている」ことを警告するものです。Detached Head
状態のまま機能開発を開始しても、そこに戻るためのブランチは作成されません。(たとえば機能をマージするつもりで) 他のブランチをチェックアウトしてしまうと、その機能を参照できなくなります。
重要なことは、開発は常にブランチで行わなければならず、Detached Head
で行ってはならないという点です。これは、新しいコミットに対する参照手段を常に確保するためです。ただし、過去のコミットを閲覧するだけであれば、Detached Head
状態か否かを気にする必要はありません。
要約
このページでは、ブランチを変更する際の git checkout
コマンドの使用方法について主に説明しました。要約すると、git checkout
がブランチで使用された場合に、HEAD
の ref 対象が変更されます。ブランチの作成、ブランチの切り替え、リモート・ブランチのチェックアウトに使用できます。git checkout
コマンドは、標準の Git 操作に不可欠なツールです。このコマンドは、git merge と対をなします。git checkout
と git merge
の両コマンドは、git ワークフローを有効にするために不可欠です。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。