|
作者:[Perry Ye] 预计阅读时间:3 - 5 mins 声明:本文承接《后端新人 Git 入职第一课:玩转分支协作,告别代码冲突》,是 Git 系列的第二篇。 |
相信每个后端新人都有过这样的“惊魂一刻”:可能是 git push 后才发现代码里有个愚蠢的 Bug,可能是上一秒 commit 后发现漏掉了一个关键文件,也可能是在一顿操作后,发现整个本地分支变得混乱不堪,只希望倒流时光瞬间还原。
别怕,这些都是成长的必经之路。Git 的设计者早已预料到我们会犯各种错误,并为我们准备了功能强大的“后悔药”。
这篇文章就是你的“药箱说明书”。我将带你从 4 个由浅入深的场景入手,让你学会如何安全、自信地“回到过去”。无论你习惯用命令行,还是偏爱 IntelliJ IDEA 的图形化界面,都能在这里找到解药。
- 等级一:速效救心丸 (修改在工作区,还未 commit)
- 等级二:修正贴 (刚 commit 就后悔了)
- 等级三:公开声明 (代码已 push,想安全撤销)
- 等级四:时光机 (本地分支彻底搞砸)
- 终极保险:黑匣子 reflog
- 总结与速查表
药效等级一:速效救心丸 (修改在工作区,还未 commit)
这是最轻微的“病情”,也是最容易处理的。
场景描述: 你正在修改 ProductServiceImpl.java 文件,为了调试加了很多测试代码和 log.info()。改到一半发现思路错了,想完全放弃本次修改,让这个文件恢复到上次 commit 时的状态。
使用 git restore 命令 (或旧版的 git checkout --)。
|
Bash |
IDEA 的回滚功能非常直观。
- 打开 Git 工具窗口 (通常在底部工具栏,或 View -> Tool Windows -> Git)。
- 在 Local Changes (本地更改) 列表中,找到你修改过的 ProductServiceImpl.java 文件。
|
注意 : 如果IDEA没有显示Local Changes (本地更改) 列表, 10s即可调整好 以往版本 左上角工具栏 File -> Settings -> Version Control -> Commit -> 右侧取消勾选 Use non-model commit interface 最新版本 左上角工具栏 File -> Settings -> Advanced Settings -> 右侧Version Control. Git -> 勾选 Use model commit interface |
3. 右键点击该文件,在弹出的菜单中选择 Rollback... (回滚)。
4. IDEA 会弹出一个确认窗口,点击 Rollback 按钮即可。

一句话总结: 这是最安全、最常用的后悔药,就像编辑器里的 Ctrl+Z,放心使用。\
药效等级二:修正贴 (刚 commit 就后悔了)
这个场景也很常见,通常是提交信息写错了,或者漏掉了某个文件。
场景描述: 你刚刚完成了一个功能的开发,执行了 git commit。突然发现,commit message 里有个明显的错别字,而且还忘了一个相关的配置文件没有一起提交。
使用 git commit --amend 命令,它可以“修正”你最近的一次提交。
|
Bash |
- 打开 Git 工具窗口,切换到 Log 标签页。
- 你的最新一次提交会显示在列表的最顶端。
- 右键点击这个最新的 commit 记录,选择 C... (修改提交)。
- IDEA 会弹回熟悉的提交窗口。在这个窗口里,你可以:
- 修改 Commit Message。
- 勾选/取消勾选要提交的文件,把遗漏的文件加进来。
- 完成后,点击 Amend Commit 按钮。
重要警告: 如果你的这次 commit 已经 push 到了远程仓库,请不要使用 amend!因为它会修改 Git 的历史记录,对团队其他人造成困扰。对于已经推送的错误,请使用下面介绍的第三种药。
|
注意 : Amend Commit不是撤回提交。实际上,Amend Commit是新增了一次提交记录覆盖掉了上一次的提交记录 |

药效等级三:公开声明 (代码已 push,想安全撤销)
这是事故处理的正式级别。当一个有问题的提交已经被推送到共享分支(如 develop),你不能假装它没发生过,而是要用一次新的提交来“纠正”它。
场景描述: 你把一个包含 Bug 的功能 push 到了 develop 分支,测试环境因此崩溃了。你需要立刻撤销这次提交带来的所有代码变更,同时保留清晰的操作记录。
使用 git revert 命令。它会创建一个与目标提交完全相反的新提交。
|
Bash |
- 打开 Git Log 视图。
- 在历史记录中,找到那个你想要撤销的、已经 push 的 commit。
- 右键点击该 commit,选择 Revert Commit (还原提交)。
- IDEA 会自动帮你生成反向的更改,并弹出提交窗口,让你确认这次 “Revert” 操作。点击 Commit 即可。
- 最后,别忘了把这个新生成的 Revert Commit push 到远程仓库。

一句话总结: revert 是团队协作中最安全、最专业的“撤销”方式。它不修改历史,而是创造历史,告诉所有人:“我修正了之前的一个错误”。
药效等级四:时光机 (本地分支彻底搞砸,想回到过去)
这是终极武器,威力巨大,使用前请三思。它只适用于还未推送到远程的本地分支。
场景描述: 你在一个新的 feature 分支上开发,经过几天的尝试,你做了好几次错误的提交,分支逻辑已经混乱不堪。你只想彻底放弃这几天的所有改动,让分支回到三天前某个清晰、正确的 commit 状态。
使用 git reset --hard 命令,它能将你的分支指针、暂存区和工作区都强制重置到指定的状态。
|
Bash |
- 打开 Git Log 视图。
- 找到你心目中那个“完美的过去”所在的 commit 记录。
- 右键点击该 commit,选择 Reset Current Branch to Here... (将当前分支重置到此处)。

4.IDEA 会弹出一个非常重要的选项窗口,让你选择 Reset 的模式。在这里,选择 Hard。

5.点击 Reset 按钮。你的本地分支就成功穿越回过去了。
最强警告: 永远不要对一个已经 push 并与团队共享的分支使用 git reset --hard!这会强制删除远程仓库的历史记录,对正在基于这个分支开发的同事来说是毁灭性的打击。
万一,我是说万一,你连时光机都用错了(比如 reset --hard 到了一个更早的错误位置),怎么办?别怕,Git 还有个“黑匣子”——reflog。
reflog 记录了你本地仓库所有 HEAD 的变动历史,包括那些被 reset 掉的 commit。
|
Bash |
你会看到一个列表,里面有你每一次 commit, reset, checkout 的记录。找到你误删之前的那个 commit ID,再次使用 git reset --hard <commit-id> 就能把它找回来。
让我们用一张表格来总结今天的四种后悔药:

现在,你已经掌握了 Git 的“后悔”技能。记住,这些工具的存在,不是为了让你害怕犯错,而是为了让你能够无所畏惧地去尝试、去创造。
放手去写代码吧,Git 在你身后!

156

被折叠的 条评论
为什么被折叠?



