撤销 GitHub 的“压缩合并”操作,转为普通的合并提交

4
3个回答

2
尽管我完全同意@torek的答案,但他遗漏了一些细节。您确实可以还原 master 分支上的提交。有两种方法可做到这一点:
  • 您可以更改历史记录并使用 git reset HEAD ~ 1 。仅当此期间未对 master 分支提交任何其他内容时,才有效,并且您将不得不使用 git push -f 进行推送。使用此命令将从历史记录中删除提交。
  • 或者您可以使用 git revert REV ,其中 REV 是提交的哈希值。在这种情况下,将创建一个额外的提交,该提交撤消了提交的确切工作。

然后,在新的pull请求中只需要拥有这项工作的最简单方法是先检出确切的工作: git checkout REV 。然后,您可以创建一个新的分支( git checkout -b NAME ),将此分支推送并创建新的pull请求。


你忘了提到 git rebase -i - grepsedawk
这就是我最终做的(git revert)。如果在此期间我没有向master提交任何内容,GitHub本来可以在不用CLI的情况下支持整个操作。由于GitHub一键还原由于冲突而失败,所以我必须执行git revert REV,解决冲突,然后执行git revert --continue - Marcel Stör

1

由于“挤压并合并”会根据您在拉取请求中提交的提交产生差异,从而生成一个新的普通(非合并)提交,因此您确实可以简单地撤消该单个提交。您只需要打开一个(新的)拉取请求即可。


0

这个问题上的所有答案都是可行的,但最好的答案可能是 git rebase -i

你可以输入:

git rebase -i HASHOFSQUASH~1

IE:

git rebase -i 2fa05ad3c0e92103a137c57c388ac42b3d07f5ab~1

这将会给你:

pick HASHBEFOREYOURS commit message 2
pick YOURHASH commit message 1

编辑 squash merge,然后保存文件并退出(如果使用 vim,请按 esc :wq)。
然后,它会运行重新基础,完成后 squash 提交将消失。只需执行 git push -f 将其推送为你的新主分支。

是的,使用交互式变基来消除压缩的提交会使master分支拥有一个干净的提交历史。然而,我尽可能避免向公共和广泛使用的仓库强制推送。 - Marcel Stör

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接