0

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

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

所以我输入

git log master..release1

而且我有多个提交,包括假设aa11bb22cc33

但后来我打电话

git branch --contains aa11bb22cc33

我有

release1
* master

怎么会这样?!

根据定义,我的 git log 命令应该只显示那些在 release1 中可访问但在 master 中不可访问的提交?

我也试过等效的

git log ^master release1

同样奇怪的结果。

如果可以,请解释这怎么可能。

PS 混帐 1.8.0

4

1 回答 1

0

浏览一些手册页,我认为它是这样的:即使man gitrevisions说这<A>..<B>是“从 B 可到达但从 A 不可到达的任何东西”,就像您引用的那样,这个“可到达”是指严格的 DAG(有向无环图) 意义(即“可达”意味着“是祖先”)。

实际上,git log手册页指出<A>..<B>“仅显示两个提交之间的提交”。后者也同意点点运算符是如何向我解释的:“B 中不在 A 中的所有内容”(暗示 A 和 B 类似于分支,可以“包含”提交)。

然而,在 DAG 意义上,没有分支,只有提交(任何分支都只是对提交的引用)。因此,如果提交 X “包含在 B 中”,它实际上是 B 的某个祖先,或者换句话说:它可以从 B 访问——因为在 Git 历史图表中,每个提交都有关系(“指针”,或绘制的图形)到它的祖先。

希望这可以帮助。

编辑:我忘记提及的是为什么您的提交显示在日志中,但分支 --contains 显示主分支和另一个分支。我只是以为我知道,但事实证明我根本不知道。如果您发布git log --oneline --decorate --all显示相关分支的输出,我也许可以用更具体的解释来更新我的答案:)

于 2013-01-18T08:10:57.137 回答