git pull 后如何解决冲突?

问题描述 投票:0回答:5

我必须在

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.

所以我用谷歌搜索了一下,发现人们说使用

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
的版本覆盖所有内容怎么办?

git conflict git-merge git-pull
5个回答
25
投票

为此您不需要 mergetool。手动即可轻松解决。

您的冲突是您的本地提交添加了一个文件

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

如果您只想使用远程提交的版本,那么您可以将未写入的副本移动到适当的位置并

git add
它。


关于合并工具,请查看

git help mergetool
。基本上,它将尝试运行其中的每一种可能性,直到找到一种,或者使用您已明确配置的一种。


7
投票

我想你只是忘记了命令行上的

-t
开关。根据 Git 的帮助页面,它代表
-t <tool>, --tool=<tool>
,所以它实现了你想要的。

尝试:

git mergetool -t gvimdiff

当然,您可以使用您喜欢的合并工具而不是我的,

gvimdiff
。 Meld也很棒...


5
投票

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


5
投票

如果我只是想要 git pull 中的版本覆盖所有内容怎么办? 如果你想要这样,你应该使用:

 git fetch
 git reset --hard origin/your-branch-name

0
投票

如果你有一个正确的分支策略 - 又名功能被合并到开发中,就在合并重新基等之前,最常见的是当你想在分支上运行

git pull
时,你基本上想从git服务器获取所有新东西,然后应用你自己的东西,这就是 git 通用语言,是这样的:

# 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 分支,而不是存储...但最终如果存在冲突,您将必须手动解决它们...

© www.soinside.com 2019 - 2024. All rights reserved.