4

我试图通过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 它向我显示了提交列表,但我只需要一个。

4

1 回答 1

7

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

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

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

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

任何两个提交的合并基础,例如Yand D,是两个提交都可以到达的最近的提交。

Y零步到达自己;D到达M然后Y分两步;Y附近的共同祖先也是如此。

虽然X也是一个共同的祖先,但显然更遥远:一步Y到达,两步或三步到达,要么或。所以-to-不比-to-更远(最小路径是 2 步),但-to-显然比-to-短。XDXD-M-XD-M-Y-XDXDYYYYX

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

于 2018-02-14T19:36:37.710 回答