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

时间:2015-05-28 12:28:27

标签: git git-bisect

我知道可以通过git bisectgit bisect log修复git bisect replay会话,如this question的答案中所述。

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

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

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

1 个答案:

答案 0 :(得分:5)

是的,那些引用是git bisect用来了解其当前状态的内容。因此,可以通过使用git bisect good调整引用来撤消错误的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_LOGgit bisect log下)以找出重置refs/bisect/bad引用的提交。

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

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