我有以下情况:
0badcommit在项目提交时报告了一个错误,但没有引起注意。main。我想找到哪个提交导致了这个特定问题的解决。但是,git bisect不会让我这样做,因为坏提交是好提交的祖先。我明白了
Some good revs are not ancestors of the bad rev.
git bisect cannot work properly in this case.
Maybe you mistook good and bad revs?
Run Code Online (Sandbox Code Playgroud)
有没有办法扭转二分逻辑?我还可以做些什么来找出哪些提交意外地解决了这个问题?
除了其他答案/sf/answers/5278544421/中的好建议之外,我们还可以定义自己的好和坏“术语”,这样git bisect可以更轻松地保留正确的上下文。
例如,为了将好定义为坏,将坏定义为好(这让我在一段时间后大脑冻结),我们可以这样做
\ngit bisect start --term-good mybad --term-bad mygood\nRun Code Online (Sandbox Code Playgroud)\n然后,后来,
\ngit bisect mybad 0c5c211ba # for our bad but really a good commit\ngit bisect mygood d04eb09ab # for our good but really a bad commit\nRun Code Online (Sandbox Code Playgroud)\n编辑(正确答案): \n实际上,在进一步挖掘联机帮助页后,我试图解决的此类问题的正确命令是使用git bisect oldand git bisect new。这些命令将告诉您哪个提交引入了修复,而不是哪个提交破坏了内容。
从联机帮助页:
\n\n\n有时,您并不是在寻找导致损坏的提交,而是在寻找导致其他“旧”状态和“新”状态之间发生变化的提交。例如,\n您可能正在查找引入特定修复的提交。或者您可能正在寻找第一个提交,其中源代码文件名最终全部转换为您公司的\xe2\x80\x99s 命名标准。管他呢。
\n在这种情况下,使用术语“好”和“坏”来表示“更改之前的状态”和“更改之后的状态”可能会非常令人困惑。因此,您可以分别使用术语“旧”和“新”来代替“好”和“坏”。(但请注意,您不能在单个会话中将“好”和“坏”与“旧”和“新”混合在一起。)
\n在这种更一般的用法中,您为 git bisect 提供具有某些属性的“新”提交和不具有该属性的“旧”提交。每次 git bisect 检查提交时,您都会测试该提交是否具有该属性。如果是,则将提交标记为\n“新”;否则,将其标记为“旧”。当二分完成后,git bisect 将报告\n哪个提交引入了该属性。
\n