# 在 GitHub Desktop 中签出提交

可以使用 GitHub Desktop 签出存储库以前的提交。

## 关于签出提交

签出提交允许你查看以前状态的存储库，而无需创建新的分支或修改现有的分支。 这在调试时非常有用，因为签出提交允许你查看上次提交时存储库中是否存在错误。

签出提交会使存储库处于“分离的 HEAD”状态。 在 Git 术语中，“HEAD”是指向存储库中命名分支的提示或最新提交的引用。 “分离的 HEAD”状态意味着 HEAD 引用特定的提交，但不是指向存储库中的命名分支。

> \[!NOTE]
> 切换分支时，在“拆离的 HEAD”状态下所做的任何提交都将丢失，因为这些提交不是在命名分支上进行的。 如果需要恢复丢失的提交，请参阅“[故障排除](#troubleshooting)”。

## 签出提交

1. 在左边栏中，单击“历史记录”。

   ![边栏中“历史记录”选项卡的屏幕截图。 在提交列表上方，标有“历史记录”的选项卡按钮以橙色轮廓突出显示。](/assets/images/help/desktop/history-tab-in-commit-sidebar.png)
2. 右键单击要签出的提交，然后选择“**签出提交**”。

![“历史记录”选项卡中提交列表的屏幕截图。在提交旁边的上下文菜单中，“签出提交”选项以橙色边框显示。](/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”项现在将显示“Detached HEAD”，以及已签出的提交的 SHA\*\*\*\*。![存储库栏的屏幕截图。 “Current Branch”项显示“分离的 HEAD”状态，并以橙色轮廓突出显示。](/assets/images/help/desktop/branch-item.png)
2. 若要退出“分离的 HEAD”状态，需要切换分支。 有关详细信息，请参阅“[在 GitHub Desktop 中管理分支](/zh/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`，将提交应用到存储库中的 Current Branch。

## 其他阅读材料

* ```
            Git 文档中的[分离的 HEAD](https://git-scm.com/docs/git-checkout#_detached_head)
  ```
* Git 文档中的 [Git cherry-pick](https://git-scm.com/docs/git-cherry-pick)