为什么git bisect返回的中间提交日期不在好/坏提交的时间区间内?
问题原因说明
- 首先纠正一个认知误区:
git bisect的二分逻辑完全基于提交的拓扑父子关系,和提交日期无关,提交日期属于可修改的元数据,不会对bisect的选点逻辑产生任何影响。 - 你遇到的现象是典型的「旧开发分支合并进主分支」场景,具体拓扑结构如下:
更早的公共祖先 → ... → mid提交(e868450,2020.11,在特性分支开发)→ ... → 被合并到主分支 → 坏提交(8acb2b2,2021.9)
更早的公共祖先 → ... → 好提交(45ce5b9,2021.6,在主分支开发)→ ... → 坏提交(8acb2b2,2021.9) - 对应merge-base的结果完全符合逻辑:
- 好提交和坏提交的merge-base是好提交本身:好提交是坏提交在主分支上的直系祖先,符合bisect的使用前提。
- mid提交和坏提交的merge-base是mid本身:mid提交是坏提交在特性分支侧的直系祖先,合并操作把mid纳入了坏提交的祖先链。
- 好提交和mid提交的merge-base是更早的第三方提交:两个提交分别在主分支和特性分支并行开发,互相没有直系祖先关系,共同祖先是两个分支的分叉点提交。
- 这种bisect选到日期早于好提交的提交属于完全正常的行为,你只需要正常验证该mid提交是好是坏,继续执行bisect流程即可,不存在逻辑异常。
内容的提问来源于stack exchange,提问作者calvin
相关产品推荐
相关产品推荐

