我必须在 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.

所以我用Google搜索了一下,发现有人说使用 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。它可以很容易地手动解决。

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

如果您只想使用远程提交的版本,那么您只需将未写入的副本移动到 git add 即可。


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

其他提示

我想你刚忘了“-t”切换到命令行。根据git帮助页面,它代表“-t, - tool =”;所以这就是你想要的。

尝试:

git mergetool -t gvimdiff

当然你可以使用你喜欢的合并工具而不是我的gvimdiff,meld也很棒......

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

如果我只想让git pull中的版本覆盖所有内容怎么办? 如果您只是想要使用:

 git fetch
 git reset --hard origin/your-branch-name
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top