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

Deadly 提交于 2019-12-04 16:13:27

我使用git pull并发生了合并冲突:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

我知道该文件的其他版本是好的,我的是坏的所以我的所有更改都应该放弃。 我怎样才能做到这一点?


#1楼

我认为这是你需要的git reset

请注意, git revert意味着与svn revert非常不同的东西 - 在Subversion中,revert会丢弃你的(未提交的)更改,将文件从存储库返回到当前版本,而git revert “撤消”提交。

git reset应该相当于svn revert ,也就是说,丢弃你不需要的更改。


#2楼

由于您的pull不成功,因此HEAD (而不是HEAD^ )是您分支上的最后一次“有效”提交:

git reset --hard HEAD

你想要的另一件事是让他们的改变超越你的改变。

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

git pull --strategy=theirs remote_branch

但是这已被删除,正如Junio Hamano (Git维护者)在此消息中所解释的那样。 如链接所述 ,您可以这样做:

git fetch origin
git reset --hard origin

#3楼

在这个特定的用例中,您并不想真正中止合并,只需以特定方式解决冲突。

也没有特别需要重置和执行与不同策略的合并。 git正确突出了冲突,接受其他方面更改的要求仅适用于这一个文件。

对于冲突中的未合并文件,git使索引中的文件的公共基础,本地和远程版本可用。 (这是git mergetool在3-way diff工具中使用的地方。)你可以使用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

#4楼

git merge --abort

中止当前的冲突解决过程,并尝试重建合并前的状态。

如果在合并开始时存在未提交的工作树更改,则git merge --abort在某些情况下将无法重建这些更改。 因此,建议在运行git merge之前始终提交或存储您的更改。

MERGE_HEAD存在时, git merge --abort相当于git reset --merge

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


#5楼

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

另外,正如@Michael Johnson所提到的,如果你的git版本> = 1.7.4,你也可以使用git merge --abort

与往常一样,确保在开始合并之前没有未提交的更改。

来自git merge手册页

MERGE_HEAD存在时, git merge --abort相当于git reset --merge

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

此外,关于开始合并时未提交的更改:

如果你有更改,你不想在开始合并之前提交,只需git stash在合并之前git stash它们,并在完成合并或中止之后将其git stash pop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!