仅使用git-restore<commit_hash>是行不通的。显然,必须指定-m。


当前回答

所有的答案已经涵盖了大部分内容,但我还要加上我的5美分。简而言之,恢复合并提交非常简单:

git revert -m 1 <commit-hash>

如果您有权限,可以将其直接推送到“主”分支,否则只需将其推送到“还原”分支并创建拉取请求。

您可以在此处找到有关此主题的更多有用信息:https://itcodehub.blogspot.com/2019/06/how-to-revert-merge-in-git.html

其他回答

正如Ryan所提到的,git-restore可能会使合并变得困难,因此git-restore也许不是您想要的。我发现在这里使用git reset-hard<commit hash before merge>命令更有用。

完成硬重置部分后,可以强制推送到远程分支,即git push-f<remote name><remote branch name>,其中<remote name>通常被命名为origin。从那时起,如果您愿意,可以重新合并。

所有的答案已经涵盖了大部分内容,但我还要加上我的5美分。简而言之,恢复合并提交非常简单:

git revert -m 1 <commit-hash>

如果您有权限,可以将其直接推送到“主”分支,否则只需将其推送到“还原”分支并创建拉取请求。

您可以在此处找到有关此主题的更多有用信息:https://itcodehub.blogspot.com/2019/06/how-to-revert-merge-in-git.html

-m1是被修复的当前分支的最后一个父级,-m2是合并到其中的分支的原始父级。

如果命令行令人困惑,Tortoise Git也可以在这里提供帮助。

如果您希望恢复刚才所做的更改,这是一个非常简单的答案:

commit 446sjb1uznnmaownlaybiosqwbs278q87
Merge: 123jshc 90asaf


git revert -m 2 446sjb1uznnmaownlaybiosqwbs278q87 //does the work

如果您想恢复合并提交,以下是您必须执行的操作。

首先,检查git日志以查找合并提交的id。您还可以找到与合并关联的多个父id(参见下图)。

记下黄色显示的合并提交id。父ID是在下一行中作为“合并:parent1 parent2”写入的ID。现在

短篇故事:

切换到进行合并的分支。然后,只需执行git-restore<mergecommit-id>-m1,它将打开vi控制台以输入提交消息。写,保存,退出,完成!

长话短说:

切换到进行合并的分支。在我的例子中,它是测试分支,我试图从中删除feature/analytics-v3分支。git-restore是还原任何提交的命令。但在恢复合并提交时有一个令人讨厌的技巧。您需要输入-m标志,否则它将失败。从这里开始,您需要决定是否要还原分支,并通过以下方式使其看起来与parent1或parent2完全相同:

git revert<merge commit id>-m 1(还原为parent2)

git revert<merge commit id>-m 2(还原为parent1)

你可以把这些父母记录下来,看看你想走哪条路,这是所有困惑的根源。