关于github:git diff显示不够

git diff doesn't show enough

我想看看主分支和功能分支之间的区别。我有很多从master到feature分支的拉取,并且希望看到如果我将feature合并到master中会添加的更改。

这是我的情况:

1
2
3
-*--*--*-----*<master>
  \     \     \
   1--*--*--*--2--*<feature>

我的问题是git diff master feature似乎只显示commit号2。我想看看Github Pull请求将显示的差异,我相信这是提交1的全部方法。我注意到git cherry向我展示了我想看到不同之处的承诺。

谢谢你的建议。


关于git diff A B,需要认识到的重要一点是,它只会显示出提交图中两个点之间树的状态之间的差异——它不关心历史。用于git diff.....符号具有以下含义:

An illustration of the different ways of specifying commits for git diff

所以当你运行git diff master feature时,这不仅仅是显示你标记为2的提交所带来的变化,输出应该显示master中提交的树的状态和feature中提交的树的状态之间的确切差异。如果它没有向您显示特性分支的早期更改,那么您可能解决了来自master的早期合并的冲突,而倾向于master中的版本?

正如Cebewee所说,你想要的可能是git log -p master..feature,因为git log确实关心历史。.....git log的含义不同,因为它们选择了一系列承诺:

氧化镁

顺便说一下,它经常说,从master合并到主题分支是错误的事情-相反,您应该重新调整,或者在完成后将主题分支合并到master。这使得主题分支的含义易于理解。Git维护人员发表了一篇(有点难以理解)关于合并哲学的博客文章,讨论了这一点。


git diff master feature没有显示任何提交,但是提交主程序和特性之间的文本差异。听起来好像您希望看到来自该特性的所有提交,而该特性还不在master中?在这种情况下,如果您希望看到差异,也可以尝试使用git log master..featuregit log -p master..feature

有关"a..b"语法的解释,请参阅man git-rev-parse中指定范围的部分。


我对Git比较陌生,但如果我正确理解你的问题。您的问题根源于没有正确理解远程和本地存储库以及它们如何相互关联。我记得一旦我理解了它,一切都变得简单了2倍。

您认为您处于以下情况,您只有两个分支:

  • 功能分支
  • 主分支机构

然而,如果你做一个git branch -a,你将能够看到你所有的分支,本地和远程。

所以你的真实情况是:

  • 功能分支
  • 主分支机构
  • 远程分支
1
2
3
4
5
  *---* <remote's Master> which is behind your local
      \
      -*--*--*-----*<master> which is ahead of your remote/origin
       \     \     \
        1--*--*--*--2--*<feature>

为了使您能够看到与Github Pull Request中所见类似的差异,您必须使用远程分支diff来查看差异。

1
git diff <local branch> <remote>/<remote branch>

请参见比较本地Git分支和远程分支?