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

unmerged:   some_file.txt

You are in the middle of a conflicted merge.

如何放弃对文件所做的更改,只保留已提取的更改?


当前回答

评论建议git reset-merge是git merge-ort的别名。值得注意的是,如果存在merge_HEAD,gitmerge--abort仅等同于gitreset-merge。这可以在git help for merge命令中读取。

当存在merge_HEAD时,gitmerge--abort等同于gitreset-merge。

合并失败后,如果没有merge_HEAD,则可以使用git-reset-mmerge撤消失败的合并,但不必使用gitmerge-art。它们不仅是同一事物的新旧语法。

就个人而言,我发现git reset-merge对于与所描述的场景类似的场景更为强大,并且通常合并失败。

其他回答

可能不是OP想要的,但对我来说,我试图将一个稳定分支合并到一个功能分支,但冲突太多了。由于HEAD被多次提交更改,所以我没有成功重置更改,所以简单的解决方案是强制签出到一个稳定的分支。然后您可以签出到另一个分支,它将与合并前一样。

git checkout-f master

git结帐侧分支

由于您的拉动不成功,那么HEAD(而不是HEAD^)是分支上最后一个“有效”提交:

git reset --hard HEAD

你想要的另一件事是让他们的改变凌驾于你的改变之上。

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

git pull --strategy=theirs remote_branch

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

git fetch origin
git reset --hard origin
git merge --abort

中止当前冲突解决过程,并尝试重建合并前状态。如果合并时存在未提交的工作树更改started,gitmerge--在某些情况下中止将无法重建这些变化。因此,建议始终在运行gitmerge之前提交或隐藏更改。git merge--abort等效于git reset--mergeMERGE_HEAD存在。

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

自从Git 1.6.1.3以来,Git checkout已经可以从合并的任何一侧进行签出:

git checkout --theirs _widget.html.erb

如果您的git版本>=1.6.1,则可以使用git reset-merge。

此外,正如@Michael Johnson所提到的,如果您的git版本是>=1.7.4,您也可以使用gitmerge--abort。

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

从gitmerge手册页

当存在merge_HEAD时,gitmerge--abort等同于gitreset-merge。

合并过程中,MERGE_HEAD出现。

此外,关于启动合并时未提交的更改:

如果在开始合并之前有不想提交的更改,只需在合并之前将其保存,并在完成合并或中止合并后将其弹出。