28

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

这是我的情况:

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

我的问题git diff master feature似乎只显示提交号 2。我怎样才能看到 GitHub 拉取请求将显示的差异,我相信这是提交 1 的全部方式?

我注意到git cherry向我展示了我希望看到差异的提交。

4

3 回答 3

144

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

说明为“git diff”指定提交的不同方式

因此,当您运行时git diff master feature,这不仅会显示您标记为的提交所引入的更改- 输出应该显示提交的树的状态和2提交的树的状态之间的确切差异。如果它没有向您显示功能分支上的早期更改,也许您解决了来自 master 的早期合并中的冲突,以支持 中的版本?masterfeaturemaster

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

说明为 git log 指定提交范围的不同方法

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

于 2011-03-10T08:21:47.017 回答
6

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

man git-rev-parse有关“a..b”语法的说明,请参见指定范围部分。

于 2011-03-10T06:41:11.650 回答
2

我对 Git 比较陌生,但是如果我正确理解了您的问题,那么您的问题源于没有正确理解远程和本地存储库以及它们之间的关系。我记得一旦我理解了它,一切都变得容易了两倍。

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

  • 特征分支
  • 主分支

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

所以你的真实情况是:

  • 特征分支
  • 主分支
  • 远程分支
  *---* <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>

请参阅如何将本地 Git 分支与其远程分支进行比较

于 2016-08-31T21:33:38.247 回答