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.
所以我用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
不隶属于 StackOverflow