代码回退 git reset 和 git revert的区别

1,615 阅读3分钟

方便记录问题本文用gitHub客户端对比两者区别

git reset

假如最晚提交的代码已经被推送到远端 而你又想把这次提交的代码从远端上给删掉连记录也给抹掉 使用

git reset 粘贴过来的SHA【也就是上一次提交的SHA】 --hard

注意!!! SHA是指【最早提交】的SHA 如图所示

在GUI中输入 git reset 926b8a9905399e3dca639b3383cdf8e1578885ad --hard 最晚提交的那次代码就会被抹除【如果前面有N次提交,n那么这N次提交都会被抹除】

这时候远端会提示拉去分支 因为你把本地的【最晚提交】的这次代码给抹掉了 落后于远端一次提交 他就会提示你拉去远端分支 如果你点击了Fetch origin 代码又会回到【最晚提交】的这次记录

回到正题

如果你直接在GUI中输入 git push origin 【分支名】 git 会提示你 更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。

好吧,我的分支确实落后于远程的develop分支。我需要--force

即 git push origin 【分支名】 --force

这样 代码就回退到最早提交的那次了

--hard的作用

简单的来说就是 git reset SHA 不加 --hard时 之前的代码【SHA 指逻辑修改时的SHA】回退过来还能找到 只是提交记录没有了

加上 ---hard时 提交的代码和记录都会被抹去

例如 不加--hard

总结 如果代码已经被推送到远端想要抹去记录

git reset SHA[抹去提交代码之后的SHA] --hard [清除本地记录]

git push origin 【分支名】 --force [推送到远端]

git revert 与git reset的区别

git revert 后多出一条commit ,提醒同事,这里有回撤操作,只能撤回最新的提交

git reset 直接把之前 commit 删掉,非git reset --hard的操作是不会删掉修改代码,如果远程已经有之前代码,需要强推 git push origin 【分支名】 --force

注意: 慎用revert !!!

多人协同开发时,get revert 会影响到其他人的代码

举个例子

场景: 现在有两个分支 " dev " 分支和" from-dev-22 "分支 把dev的代码给合并到from-dev-22分支上

而此时因为某些原因,我又不想这么做了,

想给回滚回去,你在dev上用了 revert 回滚代码

按理说,把dev的代码合并到from-dev-22 的提交记录和回滚记录应该在from-dev-22分支上,而现在这个记录在dev分支上面(并且dev上的代码也给修改掉了),这个是我不明白的地方(我觉得根本原因可能还是git-revert这个命令造成的) 假如说此时你的另一个同事也在dev上修改了代码,他的代码就会被全部磨抹除掉(不清楚原因)。 假如这种情况发生之后 那怎么解决呢

**revert this commit **

注意,因为前面已经有了多次提交,所以这次revert 会出现在你的本地记录中,你需要在次提交,当然在提交之前,需要看看是否有冲突需要解决

那什么时候能用revert呢?

在你自己开发的分支上可以用,revert 会有修改记录,这样不会影响到别人

在公共分支上千万不要用revert !!!

参考: juejin.cn/post/684490…