中止 Git 合并

273

我正在使用 Git 作为版本控制系统的一个项目。我从主干分支 master 上剪切出了一个名叫xyz的分支。工作一段时间后,我提交了我的代码,并拉取了主干分支。

拉取成功后,我将代码与 master 分支合并。合并后,某些文件出现了问题。我尚未提交合并后的代码。请问有人能指导我如何中止这次合并并将我当前工作的分支恢复到合并前的状态吗?


1
可能是重复的问题:如何将Git存储库还原到以前的提交? - mttdbrd
你不能恢复分支的上一个提交吗? - Wutipong Wongsakuldej
2
可能是如何撤销带有冲突的git合并操作的重复问题。 - Scott Weldon
1
请注意,在Git中,“revert”是一个命令的名称,它创建了一个新的提交,以撤消先前提交中的更改,因此这可能不是您在此处寻找的单词。我已经编辑了您的问题以进行澄清。 - Scott Weldon
3个回答

619
只要你没有犯过错,就可以打字。
git merge --abort

就像命令行所建议的那样。


17
在尝试时,我收到了以下消息: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'. 这意味着 "MyFile.java" 文件不是最新的,并且无法合并。同时也无法将索引文件重置为版本“HEAD”。 - SMBiggs
1
@Ahmad,git不会在原地使用未提交的更改(已跟踪的文件)开始合并。Git无法保护它不知道的内容。 - Timothy Truckle
是的,我通过丢失我的代码来学习它。这是我的问题细节,以及我遇到问题的方式。https://dev59.com/hrLma4cB1Zd3GeqPi_ai - Ahmad

41

如果在合并冲突时执行 "git status" 命令,Git 会首先显示如何中止合并操作。

执行 git status 命令时出现合并冲突的输出


2
不错,这启示我可以使用 git reset HEAD <file> 命令,有效地从 Git 扩展源代码控制中删除“合并”可折叠项 => 然后我可以在 GIT 扩展列表中解决冲突或撤销我的更改 :) - jave.web

14
说实话,网络上已经有很多讲解如何做到这一点的资源了:
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
1
@ScottBiggs 我认为他们把它移到了https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_undoing_merges。Denis,如果你看到了这个消息,请确认一下?如果确实是同一个链接,能否请你更新你的回答中的链接?谢谢! - Fabio says Reinstate Monica

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