如何解决git合并冲突以支持拉取的更改?

我希望从工作树中删除所有冲突的更改,而不必使用gitmergetool处理所有冲突,同时保持所有无冲突的更改。最好是,我想在拉的时候做,而不是事后。


当前回答

VS代码(集成Git)IDE用户:

如果要接受冲突文件中的所有传入更改,请执行以下步骤。

1. Go to command palette - Ctrl + Shift + P
2. Select the option - Merge Conflict: Accept All Incoming

类似地,您可以使用其他选项,如“全部接受”、“全部接受当前”等。,

其他回答

您可以使用递归的“他们的”策略选项:

git merge --strategy-option theirs

来自男子:

ours
    This option forces conflicting hunks to be auto-resolved cleanly by 
    favoring our version. Changes from the other tree that do not 
    conflict with our side are reflected to the merge result.

    This should not be confused with the ours merge strategy, which does 
    not even look at what the other tree contains at all. It discards 
    everything the other tree did, declaring our history contains all that
    happened in it.

theirs
    This is opposite of ours.

注意:正如手册页所说,“我们”的合并策略选项与“我们”合并策略非常不同。

git pull -s recursive -X theirs <remoterepo or other repo>

或者,简单地说,对于默认存储库:

git pull -X theirs

如果你已经处于冲突状态。。。

git checkout --theirs path/to/file

好吧,想象一下我刚才的情景:

你尝试合并,或是樱桃采摘,但你被阻止了

$ git cherry-pick 1023e24
error: could not apply 1023e24... [Commit Message]
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

现在,您查看了冲突的文件,并且确实不想保留更改。在我上面的例子中,文件仅在IDE自动添加的新行上发生冲突。要撤消更改并接受其更改,最简单的方法是:

git checkout --theirs path/to/the/conflicted_file.php
git add path/to/the/conflicted_file.php

与此相反(用您的版本覆盖传入的版本)是

git checkout --ours path/to/the/conflicted_file.php
git add path/to/the/conflicted_file.php

令人惊讶的是,我在网上很难找到这个答案。

git pull-X他们的答案可能会创建一个难看的合并提交,或者发出

错误:您对以下文件的本地更改将被合并覆盖:

如果您想简单地忽略对repo中文件的任何本地修改,例如,在始终应为源镜像的客户端上,请运行以下命令(用所需的分支替换master):

git fetch && git reset --hard origin/master

它是如何工作的?git fetch执行git pull,但不合并。然后gitreset-hard使您的工作树与上一次提交相匹配。您对回购中文件的所有本地更改都将被丢弃,但新的本地文件将被保留。

请注意,有时这是行不通的:

git checkout--我们的路径/to/file

or

git checkout--他们的路径/to/file

我改为这样做,假设HEAD是我们的,MERGE_HEAD是他们的

git checkout HEAD -- path/to/file

or:

git checkout MERGE_HEAD -- path/to/file

在我们这样做之后,我们很好:

git add .

如果你想了解更多,请点击此处查看精彩的torek帖子:git checkout--我们不会从未合并文件列表中删除文件