在没有合并提交的情况下恢复 git 合并

Revert git merge without a merge commit

我从开发中分支了一个功能。我在该功能分支上做了几次提交。然后我将该功能分支合并回开发并将所有内容推送到原点。

我刚刚注意到 git 快进了,但我并不真正想要。是否可以恢复该合并?在 git 日志中没有合并的提交(当我这样做时也没有要求我发表评论)。

如果重要的话,自从我推动合并以来没有任何改变。

如果您还有功能分支,您可以执行以下操作:

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

  1. 在合并之前找到 develop 上最后一次提交的 SHA。 (即合并前的 develop 状态)

  2. 在开发分支上执行以下命令:

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

    git push -f
    

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

根据定义,快进没有合并提交:唯一执行的操作是 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>