Git回退已经提交的commit,以及为合并的请求

1:

任何还没有PUSH到远端(origin),但已经被提交到本地(local)的commit,都可以用以下命令回退。

git reset HEAD~1 --hard 

意思就是说跑git.exe里的reset方法,用当前的HEAD回退一步,这一步或许不止包含一个变动(changes),并且用--hard 指令。

当然,你可以跑多次这个命令来一步步回退到你想要的地方,你也可以找到想要回退commit-id来进行

git reset --hard 

注意:这样回退你所修改的代码就会直接被清掉了,但是可以用git log来查看。这个不展开了。

2:

如果你的commit已经push到远端(origin)了,你还可以通过以下命令强行覆盖提交历史(history),这一句是跑在上面回退本地提交之后的。

git push origin HEAD --force

这里用的是git push,其实原因就是我们这里做的根本不是什么回退动作,而是直接用我们刚刚回退整理好的版本强行覆盖(--force)远端(origin),无论你是不是在做回退的操作,其实只要是需要覆盖远端的时候都会用到这个。

但这里可能会产生一个新的问题,就是你想要强制回退且强行覆盖的commit,如果被其他同事拉取(pull)了的话,当这位同事再次推送(push)这个分支的时候,那么这个原本被干掉的commit依然会被提交到现有分支上。目前不知道怎样才是一个最好的方法(这里找到了吕毅MVP大神的解决方案,很不错建议看一看),我们自己得话是喊这个分支相关的人,让他们把他们本地这个分支改个名字,然后重新检出(checkout)这一分支。

OK,到这里已经能完整地回退一个或一个已经提交的commit了,接下来另一个问题,如何撤销未完成的合并。

什么叫“未完成的”合并?

就是起了一个合并头(merge),但是没有完成提交动作(commit),这就是未完成的合并,这个我们经常会用在一些检查点,看看我已经提交的东西跟主线(master)或者其他开发主线的总差别有多少;或者是在尝试做合并的时候,艾玛,上千个冲突差点想要删库的时候。

当然,其实是可以先把合并给提交了,然后利用前面的git rest方法来回退的,对,这个也是我以前的笨方法。但是有更加有效的,那就是

git merge --abort

 

你可能感兴趣的:(Git)