【问题标题】:How to undo a git merge with conflicts如何撤消有冲突的 git 合并
【发布时间】:2011-08-10 03:06:24
【问题描述】:

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

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

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

【问题讨论】:

标签: git git-merge git-merge-conflict


【解决方案1】:

最新的 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 可以解决问题。
【解决方案2】:

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

git merge --abort

【讨论】:

  • 好的,这不适用于 1.7.0.7 :( 。必须使用 reset --hard
【解决方案3】:

实际上,值得注意的是git merge --abort 仅等效于git reset --merge,因为MERGE_HEAD 存在。这可以在 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 相同的问题,这非常有帮助,谢谢!
【解决方案4】:

源树

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

【讨论】:

    【解决方案5】:

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

    git merge --abort
    

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

    git checkout 0d1d7fc32 
    

    【讨论】:

      【解决方案6】:

      如果使用最新的 Git,

      git merge --abort
      

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

      git reset --merge
      

      git reset --hard
      

      【讨论】:

      • 对我来说,git 版本 2.31.1 发布的时间比此评论晚,所以我认为它是“最新的”,只有 git reset --hard 有效,其余的都没有。跨度>
      猜你喜欢
      • 2014-04-08
      • 2021-04-02
      • 2017-07-24
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多