无需合并提交即可还原git merge

时间:2019-09-09 11:03:19

标签: git git-merge

我从开发中分支了一个功能。我对该功能分支进行了几次提交。然后,我合并了该功能分支,重新开发并把所有东西推到了原点。

我只是注意到git做了我不想要的快进。是否可以还原该合并?在git log中,没有提交合并的提交(执行操作时也没有要求我输入评论)。

如果有关系,自从我推动合并以来,什么都没有改变。

2 个答案:

答案 0 :(得分:2)

如果您仍然具有功能分支,则可以执行以下操作:

警告:仅在您100%确定自从您要删除的提交以来开发上没有任何更改时,才应该执行以下操作。

  1. 在合并之前找到对development的最后一次提交的SHA。 (即合并之前的开发状态)

  2. 在开发分支上时执行以下操作:

    git reset --hard <sha-of-old-develop>
    
  3. 执行

    git push -f
    

现在,存储库应该恢复到合并之前的状态。

答案 1 :(得分:1)

根据定义,快进不具有合并提交:已执行的唯一操作是develop分支的重定位。因此,您可以使用以下命令来还原该更新:

git checkout develop                       # Go back to develop
git reset --hard develop@{1}               # Reset develop to its previous location
git push --force-with-lease origin develop # Push it, discarding the fast-forward

然后,如果要强制合并提交事件为空,请使用--no-ff标志:

git checkout develop
git merge --no-ff feature/<x>