gits本地代码revert后找回_代码回退 git reset 和 git revert的区别

本文详细介绍了Git的reset和revert命令的区别,以及在本地和远程分支上如何使用。git reset --hard可以删除本地记录并强制推送,但会丢失历史;git revert仅撤销最新提交,保留修改记录,适用于多人协作。慎用git revert,特别是在公共分支上,以免影响他人代码。
摘要由CSDN通过智能技术生成

546bff5dc27315347c274292f9fd7f9c.png

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

git reset

cc53a0a3d095268cd111de9c7bfc78fc.png

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

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

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

02415cecf0f5bac6d5b6bb9dc9cd8676.png

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

ffbcc8a7aa1e5b8a3519a918a63b46e8.png

016210043cf6c2d74fbbee30be346ad7.png

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

232332891fd70d69b883e74b6c516f38.png

回到正题

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

fae0c120e2c1b3f1f6520404b97159c9.png

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

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

aa3784e4872170fd74aee5b29fabe320.png

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

--hard的作用

a1203fb92fa38ba921a66f611e058388.png

540b9729408be9db58a2266727e06984.png

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

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

例如 不加--hard

ff0d39b9798f68b3d9b19ed76709d6de.png

89f7c80bfb597b1173345a8351956aa0.png

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

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分支上

d7273422e4b40893053daaee4774b1ac.png

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

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

2a5c0a952cf15a1f16eb3d7c21014282.png

按理说,把dev的代码合并到from-dev-22 的提交记录和回滚记录应该在from-dev-22分支上,而现在这个记录在dev分支上面(并且dev上的代码也给修改掉了),这个是我不明白的地方(我觉得根本原因可能还是git-revert这个命令造成的)

假如说此时你的另一个同事也在dev上修改了代码,他的代码就会被全部磨抹除掉(不清楚原因)。

假如这种情况发生之后 那怎么解决呢

8b1e85cecfe464b59a4b51ec0b13ec06.png

revert this commit

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

65ed428d2e2797e22e3881a27abf05bd.png

那什么时候能用revert呢?

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

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

参考:

https://juejin.im/post/5b0e5adc6fb9a009d82e4f20

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值