2011-03-10 103 views
20

我想查看主分支和我的功能分支之间的区别。我有很多从主人拉到我的功能分支,并希望看到如果我将我的功能合并到主人将添加的更改。git diff显示不足

这是我的情况:

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

我的问题是git diff master feature似乎只显示犯下数2.我想看到的差异,一个github上拉请求将表明,我相信这是所有的方式提交1. 我注意到git cherry显示我想提交的差异。

感谢您的任何建议。

回答

113

关于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中的版本?

由于cebewee says它可能是你想要的是git log -p master..feature,因为git log做有关历史照顾。的.....git log的含义是不同的,因为他们选择了一系列的提交:

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

顺便说一句,它经常说,从master合并到一个话题分支是错误的做法 - 相反,你应该重新分配,或在主题分支完成后将其合并到master中。这保持了主题分支的含义容易理解。该git维护者做了一个(有点难以理解)博客文章约the philosophy of merging其中讨论。

+2

但链接的博客文章也说,在一种情况,即特性分支不再合并入干净'master'的行动的一个正确的做法是合并'master'的进功能分支并解决功能分支上的冲突。 – Plasma

+0

感谢您链接到合并哲学。我正在阅读这篇文章,而且我找不到作者的名字,只是他是麦当娜。你知道他的名字? - 编辑:没关系。他的名字是Junio C Hamano。 TX –

6

git diff master feature不显示任何提交'但提交主和功能之间的文本区别。这听起来好像你想看到所有来自功能的提交,这些功能还不是主要的?在这种情况下,如果您想查看差异,请尝试git log master..featuregit log -p master..feature

有关'a..b'语法的解释,请参阅man git-rev-parse中的“指定范围”一节。

1

我对git比较陌生,但是如果我正确理解你的问题。你的问题根源于而不是正确理解远程和本地存储库以及它们如何相互关联。我记得有一次我明白了,一切都变得容易了2X。

认为你在下面,你只有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?