繁体   English   中英

将GitHub“压缩并合并”还原为常规合并提交

[英]Revert a GitHub “squash and merge” into a regular merge commit

几天前,当我合并https://github.com/nodemcu/nodemcu-firmware/pull/1627(dev分支到master分支的快照)时,我选择了“压缩并合并”,而不是常规的“合并提交” ”。 我不能简单地还原PR并从dev创建新的PR,因为与此同时已经对dev进行了提交。

是否有解决此问题的明智方法? 也许像https://stackoverflow.com/a/28497372/131929之类的东西?

尽管我完全同意@torek的回答,但他忽略了一些细节。 您确实可以在master分支上还原提交。 有两种方法可以做到这一点:

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

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

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

关于这个问题的所有答案绝对是可行的,但是最好的答案可能是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)

然后,它将运行在整个基准库中,完成后,壁球提交将消失。 只需git push -f将其推送为新的master分支即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM