ChatGPT解决这个技术问题 Extra ChatGPT

如何撤消有冲突的 git 合并

我在分支 mybranch1mybranch2 是从 mybranch1 派生的,并且在 mybranch2 中进行了更改。

然后,在 mybranch1 上,我完成了 git merge --no-commit mybranch2 它显示合并时存在冲突。

现在我想丢弃所有内容(merge 命令),以便 mybranch1 恢复到以前的状态。我不知道我该怎么做。


D
Daniel Cassidy

最新的 Git:

git merge --abort

这会尝试将您的工作副本重置为合并前的任何状态。这意味着它应该从合并之前恢复任何未提交的更改,尽管它不能总是可靠地这样做。通常,无论如何您都不应该与未提交的更改合并。

在版本 1.7.4 之前:

git reset --merge

这是较旧的语法,但与上述相同。

在版本 1.6.2 之前:

git reset --hard

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


但是对于旧版本的 git,这是使用的方式
有时,即使在较新的版本中,您仍需要使用 git reset --merge。我在 git 2.2.1 中 git reset --merge 成功(并且做正确的事情)的地方出现了 git merge --abort 错误(不做任何更改)。
我发现在弹出我的存储时发生自动合并冲突时,我需要先执行 git merge --abort,然后执行 git reset --merge
通常 git merge --abort 对我有用,但是我发现自己处于分离的 HEAD 状态签出的情况,并且我的一个文件处于“都已修改”状态。我想丢弃所有内容并返回分支,我不得不 git reset --hardgit merge --abort 告诉我没有要中止的合并,(MERGE_HEAD 缺失)。
有时 git merge --abort 无法让您恢复之前的状态,在这种情况下,“旧语法”git reset --hard 可以解决问题。
C
CommonSenseCode

实际上,值得注意的是,鉴于存在 MERGE_HEADgit merge --abort 仅等同于 git reset --merge。这可以在 git help for merge 命令中阅读。

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 在日常工作中更有用。


谢谢,这个信息很有帮助。我在错误的分支上以 git stash apply 开头的合并,而 git merge --abort 什么也没做(没有 MERGE_HEAD),而 git reset --merge 成功了。
我看到大约 10 人说 git merge --abortgit reset --merge 的新命令,我遇到了与 @geomaster 相同的问题,这非常有帮助,谢谢!
A
Adam Dymitruk

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

git merge --abort

好的,这不适用于 1.7.0.7 :(。必须使用 reset --hard 与它
H
Hanzla Habib

如果使用最新的 Git,

git merge --abort

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

git reset --merge

或者

git reset --hard

对我来说,git 版本 2.31.1 发布的时间比此评论晚,因此我认为它是“最新的”,只有 git reset --hard 有效,其余无效。
M
Manish Kumar Singh

您可以做两件事,首先通过命令撤消合并

git merge --abort

或者

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

git checkout 0d1d7fc32 

K
Kamil Kiełczewski

源树

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