git pull后如何解决冲突?

git pull之后,我必须解决一些冲突。

$ git pull
CONFLICT (rename/add): Renamed vignette_generator_mashed.h->vision_problem_8.h in 49423dd0d47abe6d839a783b5517bdfd200a202f. vision_problem_8.h added in HEAD
Added as vision_problem_8.h~HEAD_1 instead
Removed vignette_generator_cross_square.cc
Automatic merge failed; fix conflicts and then commit the result.

所以我用谷歌搜索了一下,发现有人说使用git pull。但这是我得到的:

$ git mergetool
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
No files need merging
$ git mergetool opendiff
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
opendiff: file not found

这是否意味着我必须安装一些东西?

如果我只是想要git pull的版本覆盖所有内容怎么办?

Tim asked 2020-01-26T17:48:49Z
4个解决方案
24 votes

您不需要为此的mergetool。 可以很容易地手动解决。

您的冲突是您的本地提交添加了一个文件vision_problem_8.h,该文件也通过从vignette_generator_mashed.h重命名而创建了一个远程提交。如果运行ls -l vision_problem_8.h*,您可能会看到git为您保留的该文件的多个版本。 其中一个将是您的,另一个将是远程版本。 您可以使用编辑器或任何您喜欢的工具来解决冲突的内容。 完成后,git help mergetool受影响的文件并提交以完成合并。

如果您只想使用远程提交的版本,则可以将未写入的副本移到适当位置,然后将其移动git help mergetool


关于合并工具,请看一下git help mergetool。基本上,它将尝试运行所包含的每种可能性,直到找到一种可能性,或者使用您明确配置的一种可能性。

Phil Miller answered 2020-01-26T17:49:23Z
6 votes

我认为您只是忘记了命令行中的“ -t”开关。 根据git帮助页面,它代表“ -t,--tool =”,因此可以实现您的预期。

尝试:

git mergetool -t gvimdiff

当然,您可以使用首选的mergetool代替我的vimdiff,meld也很棒。

mano2a0c40 answered 2020-01-26T17:49:52Z
5 votes

如果从项目的子目录运行合并,则git将为整个项目运行合并。 但是,mergetool只能查看(和合并)工作目录内或工作目录下的文件。 因此,如果发生这种情况,请确保尝试从项目的顶级目录运行冲突解决方案。

Bluejack answered 2020-01-26T17:50:12Z
2 votes

如果我只是希望git pull的版本覆盖所有内容怎么办?如果您只想使用,请使用:

 git fetch
 git reset --hard origin/your-branch-name
saferJo answered 2020-01-26T17:50:32Z
translate from https://stackoverflow.com:/questions/1435754/how-do-i-resolve-a-conflict-after-git-pull