git pull之后如何解决冲突?

时间:2009-09-16 22:05:40

标签: git conflict git-merge 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的版本覆盖所有内容,该怎么办?

5 个答案:

答案 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分支中,而不是将其隐藏起来...但是最终如果发生冲突,您将不得不手动解决它们...