git merge不合并

时间:2011-10-12 20:43:15

标签: git github

我有一个主人和“PersonalSite”分支,用于我正在处理的代码库。我一直试图将主人合并到PersonalSite分支无济于事。

这一次,我以为我已经把所有事情都理顺了,所以我做了:

git checkout master
git pull
git checkout PersonalSite
git pull
git merge master

看起来一切正常,它列出了我预期的文件集,但存在冲突。冲突是正确的,并且正如预期的那样,所以我修复了它,做了“git add”,“git commit”,然后是“git push”。但现在,当我查看我的git日志时,它只显示一个没有代码更改但只有一个冲突的提交。

现在,当我从“PersonalSite”分支运行“git merge master”时,它说“已经是最新的”。但事实并非如此,因为我尝试合并的所有更改都没有实际合并。到目前为止,我究竟要做些什么才能让master实际合并?

4 个答案:

答案 0 :(得分:8)

通过修复冲突并提交合并冲突,您已经完成了合并。 Git在必要时添加合并提交,这是正常的,但它们不会记录任何内容,除非合并发生以及如果存在冲突,哪些文件合并。如果你仔细查看你的日志,你会发现实际上有来自master的提交。

编辑: 好的,试试这个。您不必使用merge命令,只需将master拉入PersonalSite即可。

git checkout PersonalSite
git pull origin master

看看是什么给你的。如果它说是最新的,那么你已正确合并。

如果您像在本地一样在本地合并内容,那么您需要确保本地跟踪分支是最新的。始终指定要从中拉出的分支名称,

git pull origin master
git pull origin PersonalSite

答案 1 :(得分:5)

我意识到这是一个较旧的问题,但我只是遇到了我认为同样的问题。我无法通过其他答案中的任何命令组合解决它,但我确实通过在我想要合并到的分支中运行来解决它:

git checkout <desired_branch_name> -- .

所以对你:

git checkout master -- .

我在这里找到了这个答案: git: checkout files from another branch into current branch (don't switch HEAD to the other branch)

答案 2 :(得分:3)

假设你实际上已经合并了你想要合并的东西(这是可能的,但很难说,给出你的解释),你仍然不会在git log的输出中看到差异,只是提交消息。即使您使用-p告诉git log显示差异,合并提交的差异通常也是空的,或者可能显示冲突解决方案。这是因为从语义上讲,只有冲突解决方案才是合并提交的一部分;其他更改是其他提交的一部分。

如果您希望git log向您展示合并提交的完整效果,您可以使用:

git log -p -m -c

选项的功能:

  • -p指示它显示差异,而不仅仅是提交消息;
  • -m告诉它显示合并提交的差异;和
  • -c告诉它将两个差异合并为一个用于合并提交

gitk中的差异视图也会做同样的事情。

答案 3 :(得分:0)

除冲突解决方案外,合并不会显示任何更改。

要查看合并两侧的差异,请执行以下操作:

git diff head^..

git diff head^2..

为另一方。

希望这有帮助。