我得到了非常奇怪的结果,我无法解释
我想确定两个分支之间的区别
所以我输入了
git log master..release1
我有多次提交,包括让我们说 aa11bb22cc33
然后我打电话给
git branch --contains aa11bb22cc33
我已经
了release1
* master
怎么会发生这种情况?!
根据定义,我的git log命令应该只显示在release1中可以访问但在master中无法访问的提交?
我也尝试了等效的
git log ^master release1
同样奇怪的结果。
请解释一下你是否可以这样做。
P.S。 git 1.8.0
答案 0 :(得分:0)
通过几个手册页,我认为它是这样的:即使man gitrevisions
说<A>..<B>
是“任何可以从B到达但无法从A到达的”,就像你引用的那样, “可达”是指严格的DAG(有向无环图)意义(即“可达”是指“是”的祖先)。
确实<A>..<B>
表示git log --oneline --decorate --all
只显示提交 两次提交。“后者也同样向我解释了dotdot运算符的解释:“B中的所有东西都不在A中”(暗示A和B类似于分支,可以“包含”提交)。
然而,在DAG意义上,没有分支,只有提交(任何分支只是对提交的引用)。因此,如果提交X“包含在B中”,它实际上是B的一个祖先,或者换句话说:它可以从B到达 - 因为在Git历史图中,每个提交都有关系(“指针”或箭头在绘制图表)到它的祖先。
希望这有帮助。
编辑:我忘了提及为什么你的提交会显示在日志中但是分支--contains显示了master和另一个分支。我只是觉得我知道但事实证明我毕竟不知道。如果您发布显示相关分支的{{1}}输出,我可以用更具体的解释更新我的答案:)