コミットのチェックアウトについて
コミットをチェックアウトすると、新しいブランチの作成や既存ブランチの変更を行う必要がなく、以前の状態でリポジトリを表示できます。 これは、以前のコミット時にリポジトリにバグが存在したかうかを確認できるため、デバッグ時に役立ちます。
コミットをチェックアウトすると、リポジトリは "デタッチされた HEAD" 状態になります。 Git 用語の "HEAD" とは、リポジトリ内の名前付きブランチの先頭 (最新のコミット) を指す参照のことです。 "デタッチされた HEAD" 状態は、HEAD が特定のコミットを参照し、リポジトリ内の名前付きブランチでは参照しないことを意味します。
注: "デタッチされた HEAD" 状態で行われたコミットは、ブランチの切り替え時に失われます。これは、これらのコミットが名前付きブランチで行われないためです。 失われたコミットを回復する必要がある場合は、「トラブルシューティング」を参照してください。
コミットをチェックアウトする
-
左サイドバーにある [履歴] をクリックします。
-
チェックアウトするコミットを右クリックし、[チェックアウトコミット] を選択します。
-
リポジトリ バーの [現在のブランチ] 項目に、チェックアウトされたコミットの SHA と共に "デタッチされた HEAD" が表示されるようになりました。
-
"デタッチされた HEAD" 状態を終了するには、ブランチを切り替える必要があります。 詳しくは、「GitHub Desktop でのブランチの管理」を参照してください。
トラブルシューティング
Git コマンド ラインから git reflog
コマンドを使用して、"デタッチされた HEAD" 状態で行われたコミットを回復できます。 GitHub Desktop からコマンド ラインでリポジトリを開くには、メニュー バーに移動し、[リポジトリ] を選択し、[コマンド ラインで開く] をクリックします。
この git reflog
コマンドは、コミットを含め、リポジトリで発生したイベントの出力を表示します。 git reflog
コマンドの出力例を次に示します。
81fa9136f8 (HEAD -> main) HEAD@{0}: checkout: moving from 8bd5e736a27a52a7e36a856b30e6f0582d341aa1 to main
8bd5e736a2 HEAD@{1}: commit: testing out a feature
22fa76c125 HEAD@{2}: checkout: moving from main to 22fa76c1250a2847305b9325752d941dbaa55983
この 8bd5e736a2 HEAD@{1}: commit: testing out a feature
行は、復旧したいコミットです。これは、リポジトリが "デタッチされた HEAD" 状態の間に作成されたものです。 それを回復するには、git cherry-pick 8bd5e736a2
を実行してリポジトリ内の現在のブランチにコミットを適用します。
参考資料
- Git ドキュメントのデタッチされた HEAD
- Git ドキュメントの git-cherry-pick