# GitHub Desktop でコミットをチェックアウトする

GitHub Desktop を使用して、リポジトリ内の以前のコミットをチェックアウトできます。

## コミットのチェックアウトについて

コミットをチェックアウトすると、新しいブランチの作成や既存ブランチの変更を行う必要がなく、以前の状態でリポジトリを表示できます。 これは、以前のコミット時にリポジトリにバグが存在したかうかを確認できるため、デバッグ時に役立ちます。

コミットをチェックアウトすると、リポジトリは "デタッチされた HEAD" 状態になります。 Git 用語の "HEAD" とは、リポジトリ内の名前付きブランチの先頭 (最新のコミット) を指す参照のことです。 "デタッチされた HEAD" 状態は、HEAD が特定のコミットを参照し、リポジトリ内の名前付きブランチでは参照しないことを意味します。

> \[!NOTE]
> "デタッチされた HEAD" 状態で行われたコミットは、ブランチの切り替え時に失われます。これは、これらのコミットが名前付きブランチで行われないためです。 失われたコミットを回復する必要がある場合は、「[トラブルシューティング](#troubleshooting)」をご覧ください。

## コミットをチェックアウトする

1. 左サイドバーにある **\[履歴]** をクリックします。

   ![サイドバーの \[履歴\] タブのスクリーンショット。 コミット一覧の上にある \[履歴\] というタブ ボタンがオレンジ色の枠線で強調表示されています。](/assets/images/help/desktop/history-tab-in-commit-sidebar.png)
2. チェックアウトするコミットを右クリックし、**\[チェックアウトコミット]** を選択します。

![\[History\] タブのコミット一覧のスクリーンショット。コミットの横にあるコンテキスト メニューにある \[Checkout Commit\] オプションがオレンジ色の枠線で囲まれています。](/assets/images/help/desktop/checkout-commit.png)

1. リポジトリ バーの **\[<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-git-branch" aria-label="git-branch" role="img"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg> Current Branch]** 項目に、チェックアウトされたコミットの SHA と共に "デタッチされた HEAD" が表示されるようになりました。![リポジトリ バーのスクリーンショット。 "デタッチされた HEAD" 状態を示す"現在のブランチ" 項目。オレンジ色の枠線で強調表示されています。](/assets/images/help/desktop/branch-item.png)
2. "デタッチされた HEAD" 状態を終了するには、ブランチを切り替える必要があります。 詳しくは、「[GitHub Desktop でのブランチの管理](/ja/desktop/making-changes-in-a-branch/managing-branches-in-github-desktop#switching-between-branches)」をご覧ください。

## トラブルシューティング

Git コマンド ラインから `git reflog` コマンドを使用して、"デタッチされた HEAD" 状態で行われたコミットを回復できます。 GitHub Desktop からコマンド ラインでリポジトリを開くには、メニュー バーに移動し、**\[リポジトリ]** を選択し、**\[コマンド ラインで開く]** をクリックします。

この `git reflog` コマンドは、コミットを含め、リポジトリで発生したイベントの出力を表示します。
`git reflog` コマンドの出力例を次に示します。

```shell
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 ドキュメントの[Detached HEAD](https://git-scm.com/docs/git-checkout#_detached_head)
* Git ドキュメントにおける [Git cherry-pick](https://git-scm.com/docs/git-cherry-pick)