我尝试在合并分支上使用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
它显示了一个提交列表,但我只需要一个。
答案 0 :(得分:4)
那是因为合并后的合并基础 YYY
:
* `develop`
|
* merge branch1 into develop
|\
| * `branch1` <- HEAD sha YYY
|/
* sha XXX
是同一水平图的垂直版本:
X---M--D <-- develop
\ /
Y <-- branch1
任何两个提交的合并基础,例如Y
和D
,是两个提交都可以访问的最近提交。
Y
达到零步; D
分两步到达M
然后Y
;所以Y
是附近的共同祖先。
虽然X
也是一个共同的祖先,但显然更远:Y
一步到达X
,D
到达X
两个或三个步骤,D-M-X
或D-M-Y-X
。因此D
- 至 - X
不能超过D
- 至 - Y
(最小路径为两步),但Y
- 至 - Y
明显短于Y
- 至 - X
。
这意味着Y
是最好的共同祖先,因此是合并基础。