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

git merge-base not working on merged branch

我试图在合并的分支上使用 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 它向我显示了一个提交列表,但我只需要一个。

那是因为合并后的合并基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-to-X 不比 D-to-Y 更远(无论哪种方式,最小路径都是 2 步),但是 Y-to- Y 明显比 Y-to-X.

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