gpt4 book ai didi

git merge-base 不适用于 merge 的分支

转载 作者:行者123 更新时间:2023-12-01 12:56:49 33 4
gpt4 key购买 nike

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

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

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

当我在未 merge 的分支上发出相同的命令时,一切正常(下图)
* `develop`
|
|
| * `branch1` <- HEAD sha YYY
|/
* sha XXX

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

最佳答案

那是因为 merge 后的 merge 基是 YYY :

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

是同一张水平图的垂直版本:
X---M--D   <-- develop
\ /
Y <-- branch1

任何两个提交的 merge 基础,例如 YD ,是从两个提交可到达的最近提交。
Y 以零步到达自身; D 分两步到达 MY;所以 Y 是附近的共同祖先。

虽然 X 也是一个共同的祖先,但它显然更远: Y 一步到达 XD 两步或三步到达 X ,要么 D-M-X 要么 D-M-Y-X 。所以 D -to- X 并不比 D -to- Y 更远(无论哪种方式,最小路径都是 2 步),但 Y -to- Y 显然比 Y -to- X 短。

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

关于git merge-base 不适用于 merge 的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48794315/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com