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的..和...符号具有以下含义:
。
所以当你运行git diff master feature时,这不仅仅是显示你标记为2的提交所带来的变化,输出应该显示master中提交的树的状态和feature中提交的树的状态之间的确切差异。如果它没有向您显示特性分支的早期更改,那么您可能解决了来自master的早期合并的冲突,而倾向于master中的版本?
正如Cebewee所说,你想要的可能是git log -p master..feature,因为git log确实关心历史。..和...对git log的含义不同,因为它们选择了一系列承诺:
氧化镁
顺便说一下,它经常说,从master合并到主题分支是错误的事情-相反,您应该重新调整,或者在完成后将主题分支合并到master。这使得主题分支的含义易于理解。Git维护人员发表了一篇(有点难以理解)关于合并哲学的博客文章,讨论了这一点。
- 然而,链接的博客文章确实指出,在功能分支不再清晰地合并到master的情况下,正确的做法是将master合并到功能分支并解决功能分支上的冲突。
- 感谢您链接到合并哲学。我在读那篇文章,却找不到作者的名字,只知道他是主持人。你知道他的名字吗?--编辑:没关系。他的名字叫朱尼奥·C·哈马诺。德克萨斯州
- 回答得很好。为疯狂的语法感到羞愧!
git diff master feature没有显示任何提交,但是提交主程序和特性之间的文本差异。听起来好像您希望看到来自该特性的所有提交,而该特性还不在master中?在这种情况下,如果您希望看到差异,也可以尝试使用git log master..feature或git 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分支和远程分支?