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