是否可以从git bisect错误中更有针对性地恢复?

cma*_*ter 6 git git-bisect

我知道,这是可以修复一个git bisect通过会话git bisect log,并git bisect replay在答案中描述了这个问题.

然而,当我搞乱一个bisect会话时,这可能只是一个错误的决定,我希望能够直接修复它(即不会中止整个事情).

例如,我可以想象应该可以rm .git/refs/bisect/good-<hash>撤消错误git bisect good.

这是正确的,还是我错过了什么?
并且,可以对错误进行类似的操作git bisect bad吗?

cma*_*ter 5

是的,这些参考是git bisect用于了解其当前状态的用途.这样,可以git bisect good通过使用调整refs 来撤消错误git update-ref.

但是,这有两个问题:

  1. 好的和坏的提交标记不同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的提交.

  2. 除了引用之外,还要在git bisect位于的日志中跟踪其所有操作.git/BISECT_LOG.虽然这个日志与正常操作无关,但是自己摆弄refs会导致无意义的日志.当然,您可以忽略它或相应地修复日志,但这不会比您链接的解决方案更好.

所以,是的,这可以做到,但需要付出代价.总而言之,保存日志,修复日志和重放日志似乎是更好的选择.