Python技术迷

git提交错了?别慌,直接删除提交记录

快下班那会儿,整个人都有点晕乎,直接把一段吐槽项目经理的代码给git commit了,还没缓过神来,手一抖又给push到远程仓库去了。你想啊,这种东西留在历史里,别人回头随便一翻就能看到,太社死了……结果还真被组里那个小李提醒了一嘴,说“哥你那条commit挺有生活气息哈”,瞬间脸都绿了。

你删历史,git到底能不能彻底抹掉?

很多人可能第一反应就是“撤销呗,revert下不就完事了?”,但其实这东西跟你想的不太一样。git revert只是做了个“反操作”而已,历史还在那摆着,commit那条记录还贼清楚。你要真想把那种丑事连根拔掉,其实还得靠git reset那一套。

不过我先说下这俩命令大概区别,不然你们一会儿又混了。

git revert ——只是反悔,但人家记得你干过

git revert的本事呢,就是你提交错了,可以反着做一遍,比如你加了一堆console.log,现在想删回去,其实revert下也能达到一样的代码效果。但……历史还是能看到“你干过这事”,只不过后面又补了个“撤销”操作而已。

平时我们用得最多的就这俩写法:

git revert <commit-hash>         # 撤销某一条
git revert HEAD                  # 撤销最近一次

要是想一口气撤好几条,也能写成这样:

git revert <hash1> <hash2>       # 指定多个
git revert <hash1>^..<hash2>     # 撤销一段范围

流程很简单,先git log找commit哈希,然后revert,编辑下那条新提交说明,git push上去就完了。注意哦,这里每撤一次其实又新建了一条记录,原来的丑事还在那躺着。

git reset ——删历史,装没发生过

你真想那种“此地无银三百两”的效果,只能用git reset了。这个命令其实有点狠,直接把你HEAD指针往回指,然后你可以选择保留还是丢掉改动。

举个例子,比如你连续手滑两次,想一块抹掉:

git reset --hard HEAD~2     # 本地回到倒数第三条

这样一搞,后面那两条提交直接没了,本地代码也同步变成那会儿的样子。如果你觉得代码还得留着,可以用soft:

git reset --soft HEAD~1     # 只改commit历史,代码不变

或者说想把暂存区也清空但代码别删,那用mixed(其实不写参数默认就是这个):

git reset HEAD~1

但不管你怎么reset,本地历史虽然干净了,远程还在,你还得配合强推才算数:

git push --force

或者更规范点(比如指定分支):

git push origin main --force

这里origin就是你远程仓库名字,main分支嘛——你们可能叫master、dev啥的,自己看着来。

注意!reset+force不是儿戏

我跟你说,这种强推操作真得慎重。你如果团队里好几个人一起在用这个分支,直接force一把,别人本地分分钟一堆conflict等着你。一定要提前打声招呼,最好自己commit拉下来备份一份,别全删了就后悔。

我举个最简单的流程给你们感受下:

# 1. 查看历史,找到要删的commit
git log

# 2. 回滚到某一历史版本,比如要删最近两次提交
git reset --hard HEAD~2

# 3. 强制推送到远程
git push --force

生活中遇到过什么“事故”?

其实我印象里最离谱的还不是我自己,是我们前公司有哥们直接把自己的私人照片(你懂的那种)误加到代码里,还commit了一波,后来还是重置历史+force才救回来……人都傻了。

最后再啰嗦两句

要是真只是撤销一下,不在意那条历史被看到(比如只是代码写错了点,不是什么见不得人的东西),revert安全简单,没啥坑。你要想彻底掩盖“犯罪痕迹”,reset+push --force才是唯一解药,但千万别误删团队里别人还没同步的东西。

要不我总结一下哈,给你脑子里理理清楚:

比较项
git revert
git reset
保留历史
✅ 是
❌ 否
创建新提交
✅ 是
❌ 否
修改历史
❌ 否
✅ 是
适合公开仓库
✅ 安全
❌ 谨慎

反正我自己真碰到“社死”场面,绝对用reset那套,revert纯属留念用。对了,有问题别着急自己乱搞,问下身边的老哥,省得一不小心再来个“永久丢失”——要真那样,下班还能不能吃上晚饭都两说。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领