Git撤销错误commit

发布时间 2023-08-22 22:47:10作者: yikolemon

1、背景

新手程序员,对git一直玩不明白,一直会commit错自己的代码。

有的时候写自己的东西要push代码回去在另一台电脑上继续写,但是又不想保留自己的中间那次没用的commit,所以就有了这篇文章。

2、介绍

对于我们本地的代码,在commit后发现自己commit操作有误:commit了不想提交的代码/......

这时候只需要:

git reset --soft HEAD~1

注意:这里的soft会保留本地的代码,如果你使用hard,那么本地的代码也会变为上一次commit的内容

如果你手残,不小心把这个操作执行了两次,本来需要的commit也被你撤销了,那么只需要:

git reflog

这个命令可以查看你最近的操作记录和每个提交的SHA-1哈希值。

image-20230822222248383

查看到了SHA-1哈希值,使用如下的命令回滚到你需要的commit:

git reset 哈希值 --soft

此时你会发现,如果你reset的commit还没有push,那么在IDEA中,该commit就消失了,很好,这时候你就已经完成了。

但是,如果你需要撤销的commit已经push了,那么问题就来了:

在IDEA的Git中你依然能看见该commit,但是颜色不一致,代表你本地的代码版本覆盖到蓝色部分

image-20230822222752132

你需要强制push,来覆盖远端的那次commit:

image-20230822222924674

如果你使用IDEA的Push,会有如下提示:

这代表你当前的代码本地版本号小于远程版本号,push需要进行代码的合并

image-20230822223010425

然而我们不希望本地的push与远端不需要的那次commit进行合并,这样会保留那次不需要commit,所以我们应该使用强制push操作来覆盖:

git push origin <本地分支名>:<远程分支名>  -f

强制push成功:

image-20230822223422618

此时再查看IDEA的Git,可以看见不需要的commit已经被撤销了:

image-20230822223452450