生活不可能像你想象得那么好,但也不会像你想象得那么糟。
检出提交—Checkout Commit
1. Checkout Commit是什么?
我们在更新项目时可能出错导致后期版本出现各种bug,这时我们需要回到之前正常的版本,这时就可以使用 中的 “检出提交”-Checkout Commit(以GitHub Desktop为例) ,它可以帮助我们回到之前正常的版本,下载之前的版本代码,再加以修改、调试,是一个非常实用的版本控制工具。
2. 检出提交的作用?
- 时光机功能
- 查看项目在历史某一时刻的状态
- 可以查看、编辑、运行旧版本的代码
- 帮助你理解项目的演变过程
- 调试和问题定位
- 如果当前代码有问题,可以回到之前正常的版本
- 定位问题是在哪个提交引入的
- 对比不同版本间的差异
- 临时回退
- 临时使用旧版本进行测试
- 无需创建新分支就能查看历史代码
- 创建修复分支
- 基于某个历史提交创建新分支进行修复
- 特别是当需要在旧版本上修复bug时
3. 使用方法
- 基本操作步骤:
- 打开 “GitHub Desktop”,找到项目
- 切换到
History标签页 - 找到目标版本右键点击提交记录
- 选择 “
Checkout this commit(检出提交)”
-
详细操作:
- 检出提交后,上方显示
HEAD指针分离,位于abc1234,无法发布分离的HEAD指针 - 找到项目本地仓库目录,修改所需要的文件,然后回到 GitHub Desktop 进行提交
- 点击
abc1234右侧下拉箭头,选择main,在右侧选择新建分支,点击刚才的abc1234,输入描述,点击创建分支 - 在”github desktop”主页面上方分支选项卡下拉选择合并分支,选择刚才创建的分支,点击合并
- 合并完成后,查看项目文件,确认修改无误,点击发布,发布成功。
- 检出提交后,上方显示
-
几种常见场景的操作: 3.1查看历史代码
- 当前分支:main(最新提交)
- 找到想查看的历史提交(比如3天前)
- 右键
- Checkout this commit
- 现在工作区显示的就是那个时刻的代码
- 查看完后回到最新:切换到 main 分支
3.2 基于历史提交创建分支
- 右键点击历史提交
- 选择 “Create branch from commit”
- 输入新分支名(如:fix/old-bug)
- 新分支会自动切换到这个历史提交
- 现在可以在这个分支上修改
3.3定位问题提交
- 当前版本有问题
- 怀疑是最近某个提交导致的
- 一个个向前检查历史提交
- 右键 Checkout 逐个测试
- 找到引入问题的那个提交
- 基于那个提交创建修复分支
⚠️ 重要注意事项
-
“分离的 HEAD” 状态 分离的 HEAD 状态当你检出某个历史提交(而不是分支)时,会进入
Detached HEAD状态 在这个状态下提交代码会很危险,因为提交不属于任何分支 GitHub Desktop 会有明确提示 -
如何识别分离的 HEAD 状态
-
在 GitHub Desktop 顶部会显示: Current branch: (Detached at abc123)
-
安全操作建议
-
只读操作:如果只是查看,可以在分离状态需要修改时:
- 一定要先创建新分支,在分离状态时,GitHub Desktop 会提示:
- “Create a new branch from this commit”
- 返回主分支:
- 点击分支选择器 → 选择你的主分支(如 main)
3.与相关功能的区别
| 功能 | 作用 | 区别 |
|---|---|---|
| Checkout Commit | 查看/回到某个历史提交 | 临时查看,会进入分离状态 |
| Revert Commit | 撤销某个提交的更改 | 创建新提交来撤销旧提交 |
| Reset to Commit | 重置到某个提交 | 会删除之后的提交历史 |
| Reset to Commit | 重置到某个提交 | 会删除之后的提交历史 |
| Create Branch from Commit | 基于历史提交创建新分支 | 创建新分支,安全进行修改 |
4.github desktop“重置到提交”
- 如果在 GitHub Desktop 的历史记录中,右键菜单里的“重置”选项是灰色的(无法点击),通常是因为当前有未提交的更改,或者处于某种保护状态。
- 为了绕过这个问题,最快、最稳妥的方法是使用 GitHub Desktop 内置的命令行工具直接输入指令回退。
- 使用命令行强制回退(最快解决)
-
这个方法可以绕过界面限制,直接回到你想要的版本。
- 在 GitHub Desktop 界面中,点击顶部菜单栏的 Repository(仓库),选择 Open in Terminal(在终端中打开)(或者是 “Open in Command Prompt”)。 快捷键:在 Windows 上通常是 Ctrl + ` (反引号) 在打开的黑色命令行窗口中,输入以下命令并回车:
git reset --hard HEAD~10💉命令解释:
- HEAD~10:“当前版本往前数的第 10 个版本”。
如果你想回退更多或更少,修改数字即可(例如 HEAD~5 回退 5 个版本)。
-
hard: 表示完全丢弃这 10 个版本的代码更改(回到那个版本的样子)。
-
回车执行后,你会发现 GitHub Desktop 界面“闪”一下,然后显示已经回到了旧版本,且左侧“Changes”栏是空的。
- 先清理未提交的更改(解决界面灰色问题) 如果你一定要用鼠标点击,必须先解决为什么按钮是灰色的。
- 看 GitHub Desktop 左侧的 “Changes”(更改) 面板。
如果里面有文件(有蓝点或数字),说明你有未保存的工作。
- 如果你不需要这些修改,右键点击文件选择 “Discard All Changes”(放弃所有更改)。
- 如果你需要保留这些修改,暂时不想提交,可以在文本框随便输入点文字,点击 “Commit to main” 先提交一次。
- 当左侧 “Changes” 栏变空后,再去 “History” 栏右键点击旧版本,你会发现 “Reset” 选项现在可以点击了。
- 关键的最后一步:强制推送
无论你用哪种方法回退,代码只是在你自己的电脑上回退了。GitHub 网站上(远程仓库)依然是那 10 个错误版本。
-
你需要进行“强制推送”来覆盖网上的记录:
-
回退成功后,GitHub Desktop 顶部会出现一个 “Push origin” 按钮,旁边可能有一个黄色的警告图标或数字提示。
-
点击按钮旁边的下拉箭头(或者直接点击推送,它会报错)。
-
选择 “Force Push”(强制推送)。
-
如果是直接推送报错,提示 “Update is rejected”,点击错误提示框里的 “Begin Push” 或 “Force Push” 选项。
4. 常见问题
- 不小心在分离状态提交了代码?
解决方案
创建新分支保存这个提交
切换回主分支
如果需要,合并或cherry-pick这个提交
- 检出提交后项目跑不起来了?
解决方案
!!可能原因:
缺少依赖(package.json 不同)
数据库迁移不一致
配置文件不同
!!解决方案:
查看提交时的 package.json
安装对应版本的依赖
检查相关配置
- 最佳实践
最佳实践
查看代码用:在分离状态只查看不修改
修改代码用:先创建分支再修改
定期提交:好的提交历史让检出更有用
写清晰的提交信息:方便理解每个提交的作用
重要时刻打标签:对重要版本使用 git tag
记住黄金法则:如果只是看看,随便检出;如果要修改,先建分支
部分信息可能已经过时









