如何在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. 

所以我search了一下,发现有人在说使用git mergetool 。 但这是我得到的:

 $ 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版本覆盖所有的东西呢?

这不需要mergetool。 它可以很容易手动解决。

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

如果你只是想使用远程提交的版本,那么你可以将你没有写入的副本移动到位,并git add它。


对于合并工具,看看git help mergetool 。 基本上,它会尝试运行每个包含的可能性,直到它find一个,或者使用一个你明确configuration的。

我想你只是忘记了“-t”在你的命令行切换。 尝试:

 git mergetool -t gvimdiff 

当然,你可以使用你最喜欢的合并工具,而不是我的gvimdiff,融合是伟大的… … –

如果你从你的项目的子目录运行你的合并,git会运行整个项目的合并。 但是,mergetool只能看到(和合并)在工作目录下的文件。 所以,如果发生这种情况,请确保您尝试从项目的顶级目录运行冲突解决scheme。