为啥 git bisect 为我提供了一个相当古老的提交?

Posted

技术标签:

【中文标题】为啥 git bisect 为我提供了一个相当古老的提交?【英文标题】:Why does git bisect provide me a rather old commit?为什么 git bisect 为我提供了一个相当古老的提交? 【发布时间】:2021-11-29 03:51:25 【问题描述】:

我正在尝试使用git bisect。 我的好承诺是

commit 7ce16e99296de1d559e7317adac6bc13a727ae2b
Author: ...
Date:   Tue Jun 22 14:52:54 2021 +0800

我的错误提交是

commit 8acb2b2ed0eb1576e7961149bde27cb1568ec39e
Author: ...
Date:   Mon Sep 27 13:50:37 2021 +0800

所以我认为当 git bisect 启动时,它会在 2021 年 6 月 22 日到 2021 年 9 月 27 日之间给我一个提交。

但是,它给了我一个相当旧的

commit 2f3971bcae715839ee8d2aea837a4bf4ce31c815
Merge: 2d32bba 5777bb6
Author: ...
Date:   Tue Dec 8 11:25:04 2020 +0800

我认为这可能是因为一些合并问题,但是为什么,以及如何解决这个问题?

【问题讨论】:

“它将在 2021 年 6 月 22 日到 2021 年 9 月 27 日之间给我一个提交”不一定是因为“可能是因为某些合并问题”是正确的,例如 if you cherry-picked。鉴于此,您想解决什么问题? 那是破坏你的构建的提交吗?您可以轻松see where the commit exists in your history。 @msanford 你建议 2f3971bcae715839ee8d2aea837a4bf4ce31c815 是樱桃采摘的吗? 就是这样,或者是rebase,或者使用了一些更手动的方法来设置作者日期。编辑:查看日期发生了什么,比如git log --graph --pretty=fuller --all --ancestry-path --not --glob=refs/bisect/good-* 好的,对我来说似乎很复杂。如果我希望 git bisect 在 github.com/username/repo/commits/branch 上执行手动 bisect 之类的操作,我该怎么做? @jthill 继续做你正在做的事情,不要再关注不相关的细节。你试图让日期意味着他们没有的东西,这就是让你感到困惑的地方。并发症在你的脑海中。如果您想查看提交在祖先图中的位置,请显示您感兴趣的祖先图部分并查看该提交的位置。 【参考方案1】:

这是因为修订的作者日期可能早于修订引入分支的时间。 2 个简单的场景:

    该提交是很久以前在功能分支中开发的。它已合并到您正在分析的两个修订之间的分支中,您正在二等分。在这种情况下,git 会注意到问题来自被一分为二的 2 个修订之间的合并修订,并将继续遵循该分支,因此日期较旧。

    修订版是很久以前开发的......它是樱桃采摘(或重新定位)到您要平分的2个修订版之间的分支。修订在两个修订之间....但作者日期不会在两个修订日期之间。

【讨论】:

我运行git show --no-patch --no-notes --pretty='%ci %ai' 2f3971bcae715839ee8d2aea837a4bf4ce31c815,它同时返回2020-12-08 11:25:04 +0800 2020-12-08 11:25:04 +0800

以上是关于为啥 git bisect 为我提供了一个相当古老的提交?的主要内容,如果未能解决你的问题,请参考以下文章

git bisect

做一个 git bisect 并且其中一个提交没有建立

查找问题的利器 - Git Bisect

查找问题的利器 - Git Bisect

git bisect 并找到最后一个好的提交 - 我错过了啥吗?

使用 git bisect 定位你的 BUG