如何解决git合并冲突以支持拉取的更改?
我希望从工作树中删除所有冲突的更改,而不必使用gitmergetool处理所有冲突,同时保持所有无冲突的更改。最好是,我想在拉的时候做,而不是事后。
如何解决git合并冲突以支持拉取的更改?
我希望从工作树中删除所有冲突的更改,而不必使用gitmergetool处理所有冲突,同时保持所有无冲突的更改。最好是,我想在拉的时候做,而不是事后。
当前回答
git pull-X他们的答案可能会创建一个难看的合并提交,或者发出
错误:您对以下文件的本地更改将被合并覆盖:
如果您想简单地忽略对repo中文件的任何本地修改,例如,在始终应为源镜像的客户端上,请运行以下命令(用所需的分支替换master):
git fetch && git reset --hard origin/master
它是如何工作的?git fetch执行git pull,但不合并。然后gitreset-hard使您的工作树与上一次提交相匹配。您对回购中文件的所有本地更改都将被丢弃,但新的本地文件将被保留。
其他回答
好吧,想象一下我刚才的情景:
你尝试合并,或是樱桃采摘,但你被阻止了
$ 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 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--我们不会从未合并文件列表中删除文件
解决了。通过以下简单步骤解决所有冲突。
git fetch && git reset --hard origin/master
git pull -X theirs
git pull origin master
我发现我需要指定origin-main作为要合并到的分支。
git merge **origin main** --strategy-option theirs
如果您已经处于冲突状态,并且不想逐个签出路径。你可以试试
git merge --abort
git pull -X theirs