我知道,这是可以修复一个git bisect通过会话git bisect log,并git bisect replay在答案中描述了这个问题.
然而,当我搞乱一个bisect会话时,这可能只是一个错误的决定,我希望能够直接修复它(即不会中止整个事情).
例如,我可以想象应该可以rm .git/refs/bisect/good-<hash>撤消错误git bisect good.
这是正确的,还是我错过了什么?
并且,可以对错误进行类似的操作git bisect bad吗?
是的,这些参考是git bisect用于了解其当前状态的用途.这样,可以git bisect good通过使用调整refs 来撤消错误git update-ref.
但是,这有两个问题:
好的和坏的提交标记不同git bisect:
所有标记为良好的提交都会获得refs/bisect/good-<commit id>参考.因此,这可以通过相应的方式撤消
git update-ref -d refs/bisect/good-<commit id>
Run Code Online (Sandbox Code Playgroud)但是,git bisect只跟踪单个错误提交,因此您需要将ref重置refs/bisect/bad为已知的错误提交
git update-ref refs/bisect/bad <really bad commit id>
Run Code Online (Sandbox Code Playgroud)
您可能需要查看bisect日志(under .git/BISECT_LOG或via git bisect log)以找出重置refs/bisect/badref的提交.
除了引用之外,还要在git bisect位于的日志中跟踪其所有操作.git/BISECT_LOG.虽然这个日志与正常操作无关,但是自己摆弄refs会导致无意义的日志.当然,您可以忽略它或相应地修复日志,但这不会比您链接的解决方案更好.
所以,是的,这可以做到,但需要付出代价.总而言之,保存日志,修复日志和重放日志似乎是更好的选择.