我想看看master分支和我的功能分支之间的区别。我有很多从主服务器到我的功能分支的工作,并希望看到如果我将我的功能合并到主服务器中将会添加的更改。
这是我的情况:
-*--*--*-----*<master>
\ \ \
1--*--*--*--2--*<feature>
我的问题是git diff master feature
似乎只显示提交号2.我想看到github pull请求显示的差异,我相信这是提交1的所有方式。
我注意到git cherry
向我展示了我希望看到差异的提交。
感谢您的任何建议。
答案 0 :(得分:122)
关于git diff A B
要认识到的重要一点是它只能向你展示提交图中两个点之间树的状态之间的差异 - 它并不关心历史。 ..
使用的...
和git diff
符号具有以下含义:
因此,当您运行git diff master feature
时,不仅仅显示您标记为2
的提交所引入的更改 - 输出应显示master
中提交的树的状态之间的确切差异。 {1}}以及feature
中提交的树的状态。如果它没有显示您的功能分支上的早期更改,也许您解决了早期合并主服务器的冲突,而不是master
中的版本?
作为cebewee says,您可能想要的是git log -p master..feature
,因为git log
关心历史。 ..
的{{1}}和...
的含义不同,因为它们选择了一系列提交:
顺便提一下,它经常说从git log
合并到主题分支是不对的 - 相反,你应该在完成之后重新定位或将主题分支合并到master
。这使得主题分支的含义易于理解。 git维护者做了一篇(有点难以理解)关于the philosophy of merging的博客文章,讨论了这个问题。
答案 1 :(得分:6)
git diff master feature
没有显示任何提交,但提交master和feature之间的文本差异。听起来好像你想看到所有功能的提交,这些提交尚未掌握?在这种情况下,如果您想查看差异,请尝试git log master..feature
或git log -p master..feature
。
有关“a..b”语法的说明,请参阅man git-rev-parse
中的“规范范围”一节。
答案 2 :(得分:1)
我对git相对较新,但如果我理解你的问题。您的问题源于 not 正确理解远程和本地存储库以及它们之间的关系。我记得有一次我理解它,一切都变得容易了。
你认为你处于这种情况下,你只有2个分支:
然而,如果您执行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>