6

我知道可以通过和修复git bisect会话,如该问题的答案中所述。git bisect loggit bisect replay

但是,当我搞砸一个平分会话时,这可能只是一个错误的决定,我希望能够直接修复它(即不中止整个事情)。

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

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

4

1 回答 1

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>
      
    • 但是,git bisect仅跟踪单个错误提交,因此您需要将 ref 重置refs/bisect/bad为已知的错误提交

      git update-ref refs/bisect/bad <really bad commit id>
      

      您可能需要查看 bisect 日志(在.git/BISECT_LOG或 via下git bisect log)以找出要重置refs/bisect/badref 的提交。

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

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

于 2015-06-20T16:50:04.870 回答