git log奇怪的行为

时间:2013-01-17 22:18:45

标签: git

我得到了非常奇怪的结果,我无法解释

我想确定两个分支之间的区别

所以我输入了

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

1 个答案:

答案 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}}输出,我可以用更具体的解释更新我的答案:)