我遇到了一个合并冲突。 我怎样才能中止合并? 我遇到了一个合并冲突。 我怎样才能中止合并?(I

2019-05-13 13:07发布

我以前git pull ,并有合并冲突:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

我知道该文件的另一个版本是好的,我的是坏的,所以我所有的变化应该被抛弃。 我怎样才能做到这一点?

Answer 1:

由于您的pull不成功则HEAD (未HEAD^ )是最后一个“有效”提交您的分支:

git reset --hard HEAD

你想要的另一件是让他们改变过骑变化。

混帐的旧版本允许您使用“他们”合并策略:

git pull --strategy=theirs remote_branch

但是,这已被移除,如在解释此消息由JUNIO滨野 (Git的维护者)。 正如指出的链接 ,而不是你这样做:

git fetch origin
git reset --hard origin


Answer 2:

如果你的Git版本为> = 1.6.1,您可以使用git reset --merge

此外,作为@迈克尔约翰逊提到,如果你的Git版本为> = 1.7.4,你也可以用git merge --abort

与往常一样,请确保您启动合并之前你没有提交的更改。

从混帐合并人页

git merge --abort相当于git reset --mergeMERGE_HEAD存在。

MERGE_HEAD存在合并时正在进行中。

此外,从合并时就提交的修改:

如果你有改变你不想启动合并之前提交,只需要git stash在合并之前他们git stash pop完成合并或中止之后。



Answer 3:

git merge --abort

中止目前的冲突解决过程,并试图重建预合并状态。

如果有未提交worktree变化存在时合并开始, git merge --abort会在某些情况下无法重建这些变化。 因此,建议总是犯或运行git合并之前藏匿更改。

git merge --abort相当于git reset --mergeMERGE_HEAD存在。

http://www.git-scm.com/docs/git-merge



Answer 4:

我认为这是git reset你的需要。

要注意的是git revert意味着什么,比方说,非常不同的svn revert -在Subversion中的还原会舍弃你的(未提交)更改,返回文件从资源库中的当前版本,而git revert “撤消”提交。

git reset应该做的相当于svn revert ,也就是放弃你的随意更改。



Answer 5:

在这个特殊的使用情况下,你真的不希望中止合并,只是解决一个特定的方式冲突。

有没有特别需要复位,并用不同的策略进行合并,无论是。 冲突已经通过Git和要求正确地强调了接受其他各方改变只为这一个文件。

对于冲突的git的未合并文件,使得现有的公共基础,在索引文件的本地和远程的版本。 (这是他们从在由三路比较工具使用读git mergetool 。)您可以使用git show进行查看。

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

最简单的方法来解决冲突使用远程版本逐字为:

git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb

或者,用git> = 1.6.1:

git checkout --theirs _widget.html.erb


Answer 6:

它的那么简单。

git merge --abort

Git的本身说明你当你在这种类型的麻烦和运行的git status命令的解决方案。

git status

希望这将帮助人们。



Answer 7:

由于言论表明, git reset --merge是一个别名git merge --abort ,但值得注意的是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类似的描述的一个场景更加强大,和一般失败的合并。



Answer 8:

如果你最终合并冲突,没有任何东西犯,但仍然将合并所有下面提到的命令后,正在显示的错误,

git reset --hard HEAD
git pull --strategy=theirs remote_branch
git fetch origin
git reset --hard origin

请删除

git的\ index.lock

文件[在恢复的情况下,切片贴到其他位置],然后输入取决于你想要哪个版本以下任何命令。

git reset --hard HEAD
git reset --hard origin

希望帮助!



Answer 9:

由于Git的1.6.1.3 git checkout已经能够从合并的两侧结帐:

git checkout --theirs _widget.html.erb


Answer 10:

另一种,它保留了工作副本的状态是:

git stash
git merge --abort
git stash pop

我通常反对这项建议,因为它有效地就像在Subversion的合并,因为它扔掉在以下提交这个分支的关系。



Answer 11:

我发现我下面的工作(恢复单个文件预先合并状态):

git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*


文章来源: I ran into a merge conflict. How can I abort the merge?