如何撤消与冲突的git合并

Ans*_*hul 744 git merge git-merge git-merge-conflict

我在分公司mybranch1.mybranch2分叉,mybranch1并进行了更改mybranch2.

然后,在开启时mybranch1,我已经完成git merge --no-commit mybranch2 它显示合并时存在冲突.

现在我想丢弃所有东西(merge命令),这样mybranch1就恢复了之前的状态.我不知道我该怎么做.

Dan*_*idy 1291

最新的Git:

git merge --abort
Run Code Online (Sandbox Code Playgroud)

这会尝试将您的工作副本重置为合并前的状态.这意味着它应该从合并之前恢复任何未提交的更改,尽管它不能始终可靠地执行此操作.通常,您不应该与未提交的更改合并.

1.7.4版之前:

git reset --merge
Run Code Online (Sandbox Code Playgroud)

这是较旧的语法,但与上面的相同.

在版本1.6.2之前:

git reset --hard
Run Code Online (Sandbox Code Playgroud)

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

  • 有时你甚至需要在更新的版本中使用`git reset --merge`.我已经把'git merge --abort`错误输出了(没有变化)`git reset --merge`在git 2.2.1中成功(并做正确的事). (5认同)

Mar*_*n G 118

实际上,值得注意的git merge --abort是,它只相当于给git reset --mergeMERGE_HEAD的存在.这可以在git help for merge命令中读取.

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.
Run Code Online (Sandbox Code Playgroud)

合并失败后,如果没有合并,MERGE_HEAD则失败的合并可以撤消,git reset --merge但不一定是撤消git merge --abort,因此它们不仅是同一事物的旧语法和新语法.

就个人而言,我发现git reset --merge在日常工作中更有用.

  • 我见过大约10个人说`git merge --abort`是`git reset --merge`的新命令,我和@geomaster遇到了同样的问题,这非常有用,谢谢! (4认同)
  • 谢谢,这个信息非常有用.我有一个合并,在一个错误的分支上以`git stash apply`开头,而`git merge --abort`什么也没做(没有`MERGE_HEAD`),而`git reset --merge`就是这个伎俩. (2认同)

Ada*_*ruk 104

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

git merge --abort
Run Code Online (Sandbox Code Playgroud)


Han*_*bib 32

如果使用最新的 Git,

git merge --abort
Run Code Online (Sandbox Code Playgroud)

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

git reset --merge
Run Code Online (Sandbox Code Playgroud)

或者

git reset --hard
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,“git”版本“2.31.1”比此评论发布得晚,所以我认为它是“最新的”,只有“git reset --hard”有效,其余的都无效。 (2认同)

小智 7

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

git merge --abort
Run Code Online (Sandbox Code Playgroud)

或者

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

git checkout 0d1d7fc32 
Run Code Online (Sandbox Code Playgroud)