恢复GitHub"壁球并合并"进入常规合并提交

时间:2016-12-07 20:34:32

标签: git github

几天前,当我合并This article时,从dev分支到master分支,我选择"压缩并合并"而不是常规"合并提交"。我无法简单地还原PR并从dev创建新的PR,因为在此期间已经提交dev

有没有明智的方法来解决这个问题?也许像https://github.com/nodemcu/nodemcu-firmware/pull/1627

3 个答案:

答案 0 :(得分:1)

虽然我完全同意@ torek的回答,但他遗漏了一些细节。您确实可以恢复master分支上的提交。有两种方法可以做到这一点:

  • 您可以更改历史记录并使用git reset HEAD~1。这仅适用于您在此期间未向master分支提交任何其他内容的情况,并且您必须使用git push -f进行推送。使用此命令将从历史记录中删除提交。
  • 或者您可以使用git revert REV,其中REV是提交的哈希值。在这种情况下,将创建一个额外的提交,撤消提交的确切工作。

然后,在新拉取请求中完成此工作的最简单方法是首先查看您的确切工作:git checkout REV。然后,您可以创建一个新分支(git checkout -b NAME),推送此分支并创建一个新的拉取请求。

答案 1 :(得分:0)

由于“squash and merge”会根据您在pull请求中提交的提交从diff中进行新的常规(非合并)提交,因此您确实可以简单地还原一次提交。您只需要(重新)打开(新)拉取请求。

答案 2 :(得分: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

编辑壁球合并,然后保存文件并退出。 (esc:wq,如果它是vim)

然后,它将通过rebase运行,当它完成时,壁球提交将会消失。只需git push -f即可将其作为新的主分支。