如何撤消冲突的 git 合并

问题描述 投票:0回答:7

我在分支

mybranch1
mybranch2
是从
mybranch1
分叉出来的,并在
mybranch2
中进行了更改。

然后,在

mybranch1
时,我已经完成了
git merge --no-commit mybranch2
这表明合并时存在冲突。

现在我想丢弃所有内容(

merge
命令),以便
mybranch1
回到之前的状态。 我不知道该怎么办。

git git-merge git-merge-conflict
7个回答
1703
投票

最新 Git:

git merge --abort

这会尝试将您的工作副本重置为合并之前的状态。这意味着它应该恢复合并之前的任何未提交的更改,尽管它并不总是可靠地做到这一点。一般来说,无论如何你都不应该合并未提交的更改。

1.7.4版本之前:

git reset --merge

这是较旧的语法,但与上面的功能相同。

1.6.2 版本之前:

git reset --hard

删除所有未提交的更改,包括未提交的合并。有时,即使在支持上述命令的较新版本的 Git 中,这种行为也很有用。


160
投票

实际上,值得注意的是,鉴于

git merge --abort
存在,
git reset --merge
仅相当于
MERGE_HEAD
。这可以在合并命令的 git 帮助中阅读。

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

合并失败后,当没有

MERGE_HEAD
时,失败的合并可以用
git reset --merge
撤消,但不一定用
git merge --abort
所以它们不仅仅是同一件事的新旧语法

我个人发现

git reset --merge
在日常工作中更有用。


114
投票

假设您使用的是最新的 git,

git merge --abort

69
投票

如果使用最新的 Git,

git merge --abort

否则这将在旧的 git 版本中完成工作

git reset --merge

git reset --hard

9
投票

有两件事你可以先通过命令撤消合并

git merge --abort

你可以通过命令暂时转到之前的提交状态

git checkout 0d1d7fc32 

0
投票

由于之前没有人提到过这一点,如果您收到此错误

fatal: Could not reset index file to revision 'HEAD'.

在尝试上述方法时,您可以尝试添加文件(暂存它们),然后您可以使用

git stash
标志并给它一个标签,这样您就知道您是否偶然需要恢复,而不是仅执行
-m
提交最后一个状态你可以通过
git stash list
找到藏匿处。

对我来说,

git reset --merge
git merge --abort
因上述错误而失败。


-1
投票

源树

如果您不提交合并,则只需双击另一个分支(= checkout),当 sourcetree 询问您是否放弃所有更改时,请同意

© www.soinside.com 2019 - 2024. All rights reserved.