我必须在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
的版本覆盖所有内容,该怎么办?
答案 0 :(得分:24)
您不需要mergetool。它可以很容易地手动解决。
您的冲突是您的本地提交通过vision_problem_8.h
的重命名添加了一个远程提交也创建的文件vignette_generator_mashed.h
。如果你运行ls -l vision_problem_8.h*
,你可能会看到git为你保留的这个文件的多个版本。其中一个将是你的,另一个将是远程版本。您可以使用编辑器或任何您喜欢的工具来解决冲突的内容。完成后,git add
受影响的文件并提交以完成合并。
如果您只想使用远程提交的版本,那么您只需将未写入的副本移动到git add
即可。
关于合并工具,请查看git help mergetool
。基本上,它会尝试运行每个包含的可能性,直到找到一个,或使用您已明确配置的可能性。
答案 1 :(得分:6)
我想你只是忘记了命令行中的“-t”切换。根据git帮助页面,它代表“-t, - tool =”,因此它符合您的意图。
尝试:
git mergetool -t gvimdiff
当然你可以使用你喜欢的合并工具而不是我的gvimdiff,meld也很棒......
答案 2 :(得分:5)
如果从项目的子目录运行合并,git将为整个项目运行合并。但是,mergetool只能查看(和合并)工作目录中或下面的文件。因此,如果出现这种情况,请确保您尝试从项目的顶级目录运行冲突解决方案。
答案 3 :(得分:1)
如果我只想让git pull中的版本覆盖所有内容怎么办? 如果您只是想要使用:
git fetch
git reset --hard origin/your-branch-name
答案 4 :(得分:0)
如果您有适当的分支策略-又将功能合并到developer中,则在合并重新建立基础之前,等等,通常,当您想在分支上运行git pull
时,您基本上希望获得所有新内容从git服务器开始,然后再应用您自己的东西git lingua franca就是这样:
# put all my changes on the stash
git stash
# fully reset the current branch to the state it is on the server
git clean -d -x -f ; git reset HEAD --hard ; git pull --force
# apply your own changes
git stash pop
您也可以将存储的当前状态放到tmp分支中,而不是将其隐藏起来...但是最终如果发生冲突,您将不得不手动解决它们...