如何解决git合并冲突以支持拉取的更改?
我希望从工作树中删除所有冲突的更改,而不必使用gitmergetool处理所有冲突,同时保持所有无冲突的更改。最好是,我想在拉的时候做,而不是事后。
如何解决git合并冲突以支持拉取的更改?
我希望从工作树中删除所有冲突的更改,而不必使用gitmergetool处理所有冲突,同时保持所有无冲突的更改。最好是,我想在拉的时候做,而不是事后。
当前回答
我有一个长期运行的下一个版本分支,对开发时更改的文件、在两个分支的不同位置添加的文件等进行了大量删除。
我想将下一个版本分支的全部内容进行开发,所有内容都在一次巨大的合并提交中。
对我有效的上述命令组合是:
git merge -X theirs next-version
# lots of files left that were modified on develop but deleted on next-version
git checkout next-version .
# files removed, now add the deletions to the commit
git add .
# still have files that were added on develop; in my case they are all in web/
git rm -r web
这不是一个新的答案,只是结合了许多答案中的一部分,部分是为了保证你可能需要所有这些答案。
其他回答
好吧,想象一下我刚才的情景:
你尝试合并,或是樱桃采摘,但你被阻止了
$ 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
令人惊讶的是,我在网上很难找到这个答案。
接受远程更改(他们的),如果发生冲突,您将收到以下错误:
fatal: Not possible to fast-forward, aborting.
因此,您可能希望快速地拉动并接受他们的更改:
$ git pull -X theirs --ff
git pull -s recursive -X theirs <remoterepo or other repo>
或者,简单地说,对于默认存储库:
git pull -X theirs
如果你已经处于冲突状态。。。
git checkout --theirs path/to/file
VS代码(集成Git)IDE用户:
如果要接受冲突文件中的所有传入更改,请执行以下步骤。
1. Go to command palette - Ctrl + Shift + P
2. Select the option - Merge Conflict: Accept All Incoming
类似地,您可以使用其他选项,如“全部接受”、“全部接受当前”等。,
请注意,有时这是行不通的:
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--我们不会从未合并文件列表中删除文件