我有一个主人和“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实际合并?
答案 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..
为另一方。
希望这有帮助。