中止Git合并


119

我正在使用Git作为VCS的项目中。我xyz从master的mainline分支切下了一个分支。工作了一段时间后,我提交了我的代码并退出了分支主线。

拉力很好。然后,我将代码与master合并。合并后,某些文件存在问题。合并后我尚未提交代码。有人可以指导我如何中止此合并并将我当前正在工作的分支带到合并前的状态吗?



您不能只恢复分支的先前提交吗?
Wutipong Wongsakuldej,2017年


1
请注意,在Git中,revert是创建新提交的命令的名称,该命令还原先前提交中的更改,因此,这可能不是您在此处查找的单词。我已编辑您的问题以澄清。
斯科特·韦尔登

Answers:


295

只要您不提交,就可以键入

git merge --abort

就像命令行建议的那样。


4
我在尝试此操作时收到了此消息: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs

1
@Ahmad git不会使用未提交的更改(已跟踪文件的更改)开始合并。git无法保护它不知道的内容。
Timothy Truckle '19

是的,我是通过丢失代码来了解它的。这是我的问题的详细信息,我是如何陷入困境的。stackoverflow.com/questions/55474092/如何
Ahmad

23

如果在发生合并冲突时执行“ git status”,则git会向您显示的第一件事是如何中止合并。

发生合并冲突时的git status输出


很好,这建议我git reset HEAD <file>有效地从git扩展源控件中删除了可合并的“合并” =>然后我可以解决冲突,也可以仅还原GIT扩展列表中的更改:)
jave.web

6

实话说,网上已经有很多资源解释如何做到这一点:

Git:如何反向合并提交?

Git:如何反向合并提交?

撤销合并,来自Git的博客(从archive.org的Wayback Machine检索)

所以我想我将总结其中一些:

  1. git revert <merge commit hash>
    这会创建一个额外的“还原”提交,表明您取消了合并

  2. git reset --hard <commit hash *before* the merge>
    将此历史记录重置为您执行合并之前的历史记录。如果您在合并后有提交,则以后需要cherry-pick它们。

但老实说,这里的指南比我用图表所能解释的要好得多!:)


1
链接不见了。叹。
SMBiggs

@ScottBiggs我认为他们将其移至git-scm.com/book/en/v2/…。丹尼斯,如果您阅读此书,可以检查吗?如果确实是一样的话,您可以更新答案中的链接吗?谢谢!
法比奥说,恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.