我想使用 git bisect 来修复一些错误。
git clone git@github.com:pingcap/tidb-engine-ext.git
git checkout raftstore-proxy
git bisect start
git bisect good 45ce5b9584d618bc777877be8a77cb94f61b8410
git bisect bad 8acb2b2ed0eb1576e7961149bde27cb1568ec39e
它建议我检查 commit e868450a9f982b25790262c9e86ff1e27ab8dc2e
,我会称之为 mid 。
当我开始检查这些提交的提交日期时,这很奇怪
git show --no-patch --no-notes --pretty='%ci %ai' 45ce5b9584d618bc777877be8a77cb94f61b8410
# 2021-06-24 16:15:24 +0800 2021-06-24 16:15:24 +0800
git show --no-patch --no-notes --pretty='%ci %ai' e868450a9f982b25790262c9e86ff1e27ab8dc2e
# 2020-11-27 14:59:01 +0800 2020-11-27 14:59:01 +0800
git show --no-patch --no-notes --pretty='%ci %ai' 8acb2b2ed0eb1576e7961149bde27cb1568ec39e
# 2021-09-28 12:57:47 +0800 2021-09-27 13:50:37 +0800
我认为提交日期e868450a9f982b25790262c9e86ff1e27ab8dc2e
应该在 之间[good,bad]
,即使我们考虑到潜在的樱桃选择/变基,因为每个操作都会改变提交日期。所以这里很奇怪。
同时,我还检查了好和坏是否有共同的合并基础,结果是肯定的。我想这意味着有一条链good -> ... -> bad
,所以我可以在这条链上平分
git merge-base 45ce5b9584d618bc777877be8a77cb94f61b8410 8acb2b2ed0eb1576e7961149bde27cb1568ec39e
45ce5b9584d618bc777877be8a77cb94f61b8410
但是,我们检查了坏/中和中/好的合并基础,事情变得陌生。它显示了 good 和 mid 的合并基础既不是 good 也不是 mid,但是为什么会发生这种情况呢?
git merge-base 45ce5b9584d618bc777877be8a77cb94f61b8410 e868450a9f982b25790262c9e86ff1e27ab8dc2e
# eb82614fc19345f363458e66b53aaff5c57563d5
git merge-base e868450a9f982b25790262c9e86ff1e27ab8dc2e 8acb2b2ed0eb1576e7961149bde27cb1568ec39e
# e868450a9f982b25790262c9e86ff1e27ab8dc2e