You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何git merge-base仅返回单个提交?M优于A0的判定逻辑

Git为何判定M为最优合并基准?

Great question—this is one of those tricky Git nuances that lives in implementation details rather than the formal git merge-base man pages, so it’s totally understandable to be puzzled by it!

Let’s break down what’s happening here:

First, when Git looks for merge bases between two branches, it’s hunting for Lowest Common Ancestors (LCAs) in the commit DAG. But when multiple LCAs exist (like your M and A0), Git applies an implicit rule to pick the "best" one that you’ve observed:

  • Git prioritizes commits that have no other candidate LCA as their descendant. In plain terms, it picks the "youngest" common ancestors—those closest to the current tips of branches B and A in the commit topology.
  • Your observation that M has fewer parent commits is key here. If M is a regular, single-parent commit while A0 is a merge commit (with multiple parents), M represents a more direct, recent divergence point between B and A. Git favors this because merging from M will likely result in fewer conflicts and aligns with the intuitive idea of merging the most recent shared state.

To put this in a concrete scenario: Imagine branch A forks directly from M, while A0 is an older merge commit that both A and B ultimately trace back to. Even though A0 is a common ancestor, M is a later, more specific shared point—Git recognizes this and picks M as the optimal base because it’s the closest shared commit that doesn’t have another common ancestor sitting between it and the current branch tips.

If you want to confirm all possible merge bases exist, run git merge-base --all A B—this will output both M and A0, proving Git does recognize both but defaults to the most sensible one for merging.

At its core, this unwritten rule is a practical optimization: Git wants to merge from the most recent shared divergence point, not a distant ancestor that might include unrelated changes from other branches. It’s one of those "works as you’d expect" behaviors that lives in Git’s code rather than the official documentation.

内容的提问来源于stack exchange,提问作者Ken Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:04:24