git时不小心merge错了,如何急救

git时不小心merge错了,如何急救

事故是这样发生的--我新建了develop分支,并在此上进行开发,结束后准备checkout master,结果打错了变成 git merge master,瞬间杯具了,代码全丢,回到原始状态了。

急救,万能的Google:



撤销、回退相关命令,官方文档有详细的说明,请参考https:\/\/git-scm.com\/blog\/2010\/03\/02\/undoing-merges.html 
这里先简单列一些: 
运行带有 --amend 选项的提交命令尝试重新提交:git commit --amend
取消暂存:git reset HEAD ...
丢弃工作区的修改:git checkout -- filename
Merge错了,需要回滚,若merge后还没有修改可以用reset,若已经修改了则需要用revert
Git撤销merge,merge后还未进行任何操作,可以reset
$ git checkout [merge操作所在的分支]
$ git reset --hard [merge前的版本号]
Git撤销merge,merge后已经进行了操作,需要revert
$ git revert -m 【要撤销的那条merge线的编号】 【merge前的版本号】


我的解法:先翻看记录,git log找到你觉得最想恢复的commit,然后观察

jk@JkdeMacBook-Pro ⮀ ~/ajax-posting-app ⮀ ⭠ delvelop± ⮀ git commit -m "test jquery_5"
[delvelop 9b61380] test jquery_5
 1 file changed, 30 insertions(+)
 create mode 100644 app/views/pages/jquery_5.html.erb

这里,develop后面的一串数字字母就是你需要的,然后 git reset --hard 9b61380 ,git 就会把当前的分支的head给这个commit,所以就恢复了你想要的代码。


同时引申出一个问题,在大家通过GitHub协作时,如何避免这些错误的发生?最常见的就是别人push上去的代码,你pull下来,修改后再push,新代码和目前GitHub服务器里的代码冲突,如何尽量避免?



此外,我们发现常常发生事故的场景是,开发者长时间不提交代码,提交代码时要进行大量的解决冲突的工作,初级开发者解决冲突不当就会覆盖别人的代码。
另一种常见的造成失误的情况就是,对IDE里的工具不熟悉、粗心大意导致失误,例如不小心选了强制覆盖远程代码的选型,造成代码覆盖事故。
根据对上述分析可知,使用同一个开发分支的协作开发者注意以下事项,就可减少错误:
首先要了解Git的基本原理和基本命令,知其然就知其所以然,就能减少失误。
及时提交代码、更新代码,避免因为长时间不更新代码而产生过多冲突文件,在解决冲突的过程中初级人员也是非常容易出错的。
开发人员一定要熟悉你所使用的git工具,无论是小乌龟还是IDE里集成的git工具,避免因为对工具不熟悉造成误操作。
本地修改前应该尽可能的避免本地库与远程之间有过多的差异,本地修改前执行一次git pull先把远程更新拉到本地;
推荐的操作步骤,提交前先把本地修改存入栈,然后从服务器端更新代码,这样可以避免过多的代码merge:
1、git stash
2、git pull
3、git pop
4、若有冲突解决冲突

← ORID-Ajax交互设计/jQuery的几个小套路总结

参考文献:

扫描二维码关注公众号,回复: 3742367 查看本文章

http://jkxruby.logdown.com/posts/2169853-careless-git-merge-is-wrong-how-to-first-aid

猜你喜欢

转载自blog.csdn.net/weixin_41282397/article/details/82805313