简体   繁体   中英

git merge-base not working on merged branch

I tried to get ancestor of my branch with git merge-base command on merged branch.

When I try git merge-base develop branch1 it shows sha YYY instead of XXX

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

Everything works fine when I fire the same command on not merged branch (diagram bellow)

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

The only way I get this commit id is by git log --oneline --boundary develop...branch1 It shows me a list of commits but I need only one.

That's because the merge base after the merge is YYY :

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

is a vertical version of this same horizontal drawing:

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

The merge base of any two commits, such as Y and D , is the nearest commit reachable from both commits.

Y reaches itself in zero steps; D reaches M and then Y in two steps; so Y is a nearby common ancestor.

While X is also a common ancestor, it is clearly more distant: Y reaches X in one step, and D reaches X in two or three steps, either DMX or DMYX . So D -to- X is no further than D -to- Y (min path is 2 steps either way), but Y -to- Y is clearly shorter than Y -to- X .

This means that Y is the best common ancestor, and hence is the merge base.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM