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

unmerged:   some_file.txt

You are in the middle of a conflicted merge.

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


当前回答

对于git>=1.6.1:

git merge --abort

对于旧版本的git,这将完成以下任务:

git reset --merge

or

git reset --hard

其他回答

为了避免陷入这种麻烦,可以扩展git合并-中止方法,并在合并之前创建一个单独的测试分支。

案例:你有一个主题分支,它没有被合并,因为你分心了/有些事情发生了/你知道,但它已经准备好了。

现在可以将其合并到master中吗?

在测试分支中工作以估计/找到解决方案,然后放弃测试分支并在主题分支中应用解决方案。

# Checkout the topic branch
git checkout topic-branch-1

# Create a _test_ branch on top of this
git checkout -b test

# Attempt to merge master
git merge master

# If it fails you can abandon the merge
git merge --abort
git checkout -
git branch -D test  # we don't care about this branch really...

努力解决冲突。

# Checkout the topic branch
git checkout topic-branch-1

# Create a _test_ branch on top of this
git checkout -b test

# Attempt to merge master
git merge master

# resolve conflicts, run it through tests, etc
# then
git commit <conflict-resolving>

# You *could* now even create a separate test branch on top of master
# and see if you are able to merge
git checkout master
git checkout -b master-test
git merge test

最后再次签出主题分支,从测试分支应用修复程序并继续执行PR。最后删除测试和主测试。

卷入的是的,但在我做好准备之前,它不会干扰我的主题或主分支。

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

git checkout-f master

git结帐侧分支

对于git>=1.6.1:

git merge --abort

对于旧版本的git,这将完成以下任务:

git reset --merge

or

git reset --hard

另一种保留工作副本状态的方法是:

git stash
git merge --abort
git stash pop

我通常建议不要这样做,因为它实际上就像Subversion中的合并,因为它会在接下来的提交中丢弃分支关系。

git merge --abort

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

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