【问题标题】:Is a more targeted recovery from git bisect mistakes possible?是否可以从 git bisect 错误中进行更有针对性的恢复?
【发布时间】:2015-08-10 23:09:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • git bisect 是一个shell脚本,去吧。
  • @jthill 啊,很酷,我没有意识到这很容易,只有大约 500 LOC :-) 我一定会仔细看看那个脚本。

标签: git git-bisect


【解决方案1】:

是的,git bisect 使用这些 ref 来了解其当前状态。因此,可以通过使用git update-ref 调整引用来撤消错误的git bisect good

但是,这有两个问题:

  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 下或通过git bisect log),以了解重置refs/bisect/bad 参考的哪个提交。

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

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

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 2018-06-03
    • 2012-01-25
    • 2015-02-06
    • 2015-05-13
    • 1970-01-01
    • 2016-03-16
    • 2020-07-26
    • 2020-07-25
    相关资源
    最近更新 更多