git merge-base不在合并分支上工作

时间:2018-02-14 18:55:38

标签: git merge-base

我尝试在合并分支上使用git merge-base命令获取我的分支的祖先。

当我尝试git merge-base develop branch1时,它显示sha YYY 而不是 XXX

* `develop`
|
* merge branch1 into develop
|\
| * `branch1` <- HEAD sha YYY
|/
* sha XXX

当我在未合并的分支上发出相同的命令时,一切正常(图表下方)

* `develop`
|
|
| * `branch1` <- HEAD sha YYY
|/
* sha XXX

我获得此提交ID的唯一方法是  git log --oneline --boundary develop...branch1 它显示了一个提交列表,但我只需要一个。

1 个答案:

答案 0 :(得分:4)

那是因为合并后的合并基础 YYY

* `develop`
|
* merge branch1 into develop
|\
| * `branch1` <- HEAD sha YYY
|/
* sha XXX

是同一水平图的垂直版本:

X---M--D   <-- develop
 \ /
  Y   <-- branch1

任何两个提交的合并基础,例如YD,是两个提交都可以访问的最近提交。

Y达到零步; D分两步到达M然后Y;所以Y是附近的共同祖先。

虽然X也是一个共同的祖先,但显然更远:Y一步到达XD到达X两个或三个步骤,D-M-XD-M-Y-X。因此D - 至 - X不能超过D - 至 - Y(最小路径为两步),但Y - 至 - Y明显短于Y - 至 - X

这意味着Y是最好的共同祖先,因此是合并基础。