git diff显示不够

时间:2011-03-10 06:27:45

标签: git github git-diff

我想看看master分支和我的功能分支之间的区别。我有很多从主服务器到我的功能分支的工作,并希望看到如果我将我的功能合并到主服务器中将会添加的更改。

这是我的情况:

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

我的问题是git diff master feature似乎只显示提交号2.我想看到github pull请求显示的差异,我相信这是提交1的所有方式。 我注意到git cherry向我展示了我希望看到差异的提交。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:122)

关于git diff A B要认识到的重要一点是它只能向你展示提交图中两个点之间树的状态之间的差异 - 它并不关心历史。 ..使用的...git diff符号具有以下含义:

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

因此,当您运行git diff master feature时,不仅仅显示您标记为2的提交所引入的更改 - 输出应显示master中提交的树的状态之间的确切差异。 {1}}以及feature中提交的树的状态。如果它没有显示您的功能分支上的早期更改,也许您解决了早期合并主服务器的冲突,而不是master中的版本?

作为cebewee says,您可能想要的是git log -p master..feature,因为git log 关心历史。 ..的{​​{1}}和...的含义不同,因为它们选择了一系列提交:

An illustration of the different ways of specifying ranges of commits for git log

顺便提一下,它经常说从git log合并到主题分支是不对的 - 相反,你应该在完成之后重新定位或将主题分支合并到master。这使得主题分支的含义易于理解。 git维护者做了一篇(有点难以理解)关于the philosophy of merging的博客文章,讨论了这个问题。

答案 1 :(得分:6)

git diff master feature没有显示任何提交,但提交master和feature之间的文本差异。听起来好像你想看到所有功能的提交,这些提交尚未掌握?在这种情况下,如果您想查看差异,请尝试git log master..featuregit log -p master..feature

有关“a..b”语法的说明,请参阅man git-rev-parse中的“规范范围”一节。

答案 2 :(得分:1)

我对git相对较新,但如果我理解你的问题。您的问题源于 not 正确理解远程和本地存储库以及它们之间的关系。我记得有一次我理解它,一切都变得容易了。

认为你处于这种情况下,你只有2个分支:

  • featureBranch
  • masterBranch

然而,如果您执行git branch -a,您将能够看到所有您的分支机构,本地和远程

所以真正的情况是:

  • featureBranch
  • masterBranch
  • 远程分支(S)
  *---* <remote's Master> which is behind your local
      \
      -*--*--*-----*<master> which is ahead of your remote/origin
       \     \     \
        1--*--*--*--2--*<feature>

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

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

请参阅compare local git branch with remote branch?