后端新人 Git 入职第二课:代码写错不用慌,Git ‘后悔药’完全指南

作者:[Perry Ye]

预计阅读时间:3 - 5 mins

声明:本文承接《后端新人 Git 入职第一课:玩转分支协作,告别代码冲突》,是 Git 系列的第二篇。

相信每个后端新人都有过这样的“惊魂一刻”:可能是 git push 后才发现代码里有个愚蠢的 Bug,可能是上一秒 commit 后发现漏掉了一个关键文件,也可能是在一顿操作后,发现整个本地分支变得混乱不堪,只希望倒流时光瞬间还原。

别怕,这些都是成长的必经之路。Git 的设计者早已预料到我们会犯各种错误,并为我们准备了功能强大的“后悔药”。

这篇文章就是你的“药箱说明书”。我将带你从 4 个由浅入深的场景入手,让你学会如何安全、自信地“回到过去”。无论你习惯用命令行,还是偏爱 IntelliJ IDEA 的图形化界面,都能在这里找到解药。

目录

  1. 等级一:速效救心丸 (修改在工作区,还未 commit)
  2. 等级二:修正贴 (刚 commit 就后悔了)
  3. 等级三:公开声明 (代码已 push,想安全撤销)
  4. 等级四:时光机 (本地分支彻底搞砸)
  5. 终极保险:黑匣子 reflog
  6. 总结与速查表

药效等级一:速效救心丸 (修改在工作区,还未 commit)

这是最轻微的“病情”,也是最容易处理的。

场景描述: 你正在修改 ProductServiceImpl.java 文件,为了调试加了很多测试代码和 log.info()。改到一半发现思路错了,想完全放弃本次修改,让这个文件恢复到上次 commit 时的状态。

命令行解法

使用 git restore 命令 (或旧版的 git checkout --)。

Bash
# 推荐使用 restore,语义更清晰
git restore src/main/java/com/example/service/ProductServiceImpl.java

# 执行后,该文件的所有未暂存的修改都会被撤销

IntelliJ IDEA 图形化解法 (强烈推荐)

IDEA 的回滚功能非常直观。

  1. 打开 Git 工具窗口 (通常在底部工具栏,或 View -> Tool Windows -> Git)。
  2. 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
# 1. 如果有遗漏的文件,先 add 它
git add src/main/resources/application-new.yml

# 2. 执行 amend 命令
git commit --amend

# 这会打开你的默认文本编辑器,让你修改上一次的 commit message。
# 修改后保存退出,一次新的、修正后的 commit 就会替换掉刚才那个错误的 commit。

IntelliJ IDEA 图形化解法

  1. 打开 Git 工具窗口,切换到 Log 标签页。
  2. 你的最新一次提交会显示在列表的最顶端。
  3. 右键点击这个最新的 commit 记录,选择 C... (修改提交)。
  4. IDEA 会弹回熟悉的提交窗口。在这个窗口里,你可以:
  • 修改 Commit Message
  • 勾选/取消勾选要提交的文件,把遗漏的文件加进来。
  • 完成后,点击 Amend Commit 按钮。

重要警告: 如果你的这次 commit 已经 push 到了远程仓库,请不要使用 amend!因为它会修改 Git 的历史记录,对团队其他人造成困扰。对于已经推送的错误,请使用下面介绍的第三种药。

注意 : Amend Commit不是撤回提交。实际上,Amend Commit是新增了一次提交记录覆盖掉了上一次的提交记录

药效等级三:公开声明 (代码已 push,想安全撤销)

这是事故处理的正式级别。当一个有问题的提交已经被推送到共享分支(如 develop),你不能假装它没发生过,而是要用一次新的提交来“纠正”它。

场景描述: 你把一个包含 Bug 的功能 push 到了 develop 分支,测试环境因此崩溃了。你需要立刻撤销这次提交带来的所有代码变更,同时保留清晰的操作记录。

命令行解法

使用 git revert 命令。它会创建一个与目标提交完全相反的新提交。

Bash
# 1. 首先,通过 git log 找到那个错误提交的 commit id (假设是 a8b1f6d)
git log# 2. 执行 revert 命令
git revert a8b1f6d

# Git 会自动生成一个新的 commit,这个 commit 的内容就是撤销 a8b1f6d 的所有更改。# 之后,将这个新的“拨乱反正”的 commit 推送到远程即可。
git push origin develop

IntelliJ IDEA 图形化解法

  1. 打开 Git Log 视图。
  2. 在历史记录中,找到那个你想要撤销的、已经 push 的 commit。
  3. 右键点击该 commit,选择 Revert Commit (还原提交)。
  4. IDEA 会自动帮你生成反向的更改,并弹出提交窗口,让你确认这次 “Revert” 操作。点击 Commit 即可。
  5. 最后,别忘了把这个新生成的 Revert Commit push 到远程仓库。

一句话总结: revert 是团队协作中最安全、最专业的“撤销”方式。它不修改历史,而是创造历史,告诉所有人:“我修正了之前的一个错误”。

药效等级四:时光机 (本地分支彻底搞砸,想回到过去)

这是终极武器,威力巨大,使用前请三思。它只适用于还未推送到远程的本地分支

场景描述: 你在一个新的 feature 分支上开发,经过几天的尝试,你做了好几次错误的提交,分支逻辑已经混乱不堪。你只想彻底放弃这几天的所有改动,让分支回到三天前某个清晰、正确的 commit 状态。

命令行解法

使用 git reset --hard 命令,它能将你的分支指针、暂存区和工作区都强制重置到指定的状态。

Bash
# 1. 同样,先通过 git log 找到你想回到的那个“正确”的 commit id (假设是 f4c3e2a)
git log# 2. 启动时光机!
git reset --hard f4c3e2a

# 执行后,所有在 f4c3e2a 之后的 commit 都会从历史记录中消失,# 你的本地代码也会瞬间恢复到 f4c3e2a 提交时的样子。

IntelliJ IDEA 图形化解法

  1. 打开 Git Log 视图。
  2. 找到你心目中那个“完美的过去”所在的 commit 记录。
  3. 右键点击该 commit,选择 Reset Current Branch to Here... (将当前分支重置到此处)。

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

   5.点击 Reset 按钮。你的本地分支就成功穿越回过去了。

最强警告: 永远不要对一个已经 push 并与团队共享的分支使用 git reset --hard!这会强制删除远程仓库的历史记录,对正在基于这个分支开发的同事来说是毁灭性的打击。

终极保险:黑匣子 reflog

万一,我是说万一,你连时光机都用错了(比如 reset --hard 到了一个更早的错误位置),怎么办?别怕,Git 还有个“黑匣子”——reflog

reflog 记录了你本地仓库所有 HEAD 的变动历史,包括那些被 reset 掉的 commit。

Bash
# 查看你的操作日志
git reflog

你会看到一个列表,里面有你每一次 commit, reset, checkout 的记录。找到你误删之前的那个 commit ID,再次使用 git reset --hard <commit-id> 就能把它找回来。

总结

让我们用一张表格来总结今天的四种后悔药:

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

放手去写代码吧,Git 在你身后!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值