今天使用eclipse的git插件进行代码合并时,又出现了匪夷所思的事:
我本地commit后,pull远程仓库,merge过程中不知道出现什么错误,导致我当时的本地仓库处于merging状态,代码一部分更新了,一部分没更新。由于更新的代码量比较大,一点一点区分过于困难,一度不知所措。
后来经git大神一句指点,直接把我local还原到HEAD,尝试重新pull就可以了,也就是使用 git reset --hard HEAD
,把 本地仓库回滚到最后一个commit状态。
同时这件事也再次说明,在合作开发过程中,随时commit是一个好习惯,最好是每开发完一个小功能点就commit一次。
最后,再总结一下git reset
的其他常用应用场景:
回滚add操作:
RT。
回滚最近几次commit:
git reset --hard HEAD~2
:回滚最近两次
git reset --hard HEAD~n
:回滚最近n次
回滚pull:
如果你从远程仓库pull下来的代码跟本地产生很多冲突,而你又暂时不想解决这些冲突,可以使用 git reset --hard ORIG_HEAD
回滚这次操作,前提是你pull之前已经commit过,不然这次回滚会把你最后一次commit后又更改的代码丢弃,原因上面说过,该命令是回到上一次commit状态,如果pull之前没有commit,请看下一个场景。
在没有commit的情况下回滚pull:
如果你本地更改了代码,但是知道这次pull不会跟自己的更改有冲突,于是你先pull了,然后又TM后悔了,想回滚,此时请使用git reset --merge ORIG_HEAD
,把–hard换成–merge就可以保留你之前的那些更改。