方便记录问题本文用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 !!!