我知道可以通过和修复git bisect
会话,如该问题的答案中所述。git bisect log
git bisect replay
但是,当我搞砸一个平分会话时,这可能只是一个错误的决定,我希望能够直接修复它(即不中止整个事情)。
例如,我可以想象应该可以rm .git/refs/bisect/good-<hash>
撤消错误的git bisect good
.
这是正确的,还是我错过了什么?
而且,可以对错误的 进行类似的操作git bisect bad
吗?
我知道可以通过和修复git bisect
会话,如该问题的答案中所述。git bisect log
git bisect replay
但是,当我搞砸一个平分会话时,这可能只是一个错误的决定,我希望能够直接修复它(即不中止整个事情)。
例如,我可以想象应该可以rm .git/refs/bisect/good-<hash>
撤消错误的git bisect good
.
这是正确的,还是我错过了什么?
而且,可以对错误的 进行类似的操作git bisect bad
吗?
是的,这些参考是git bisect
用来了解其当前状态的。因此,可以git bisect good
通过使用 调整 refs来撤消错误git update-ref
。
但是,这有两个问题:
好的和坏的提交用不同的方式标记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/bad
ref 的提交。
除了 refs 之外,git bisect
还在位于的日志中跟踪其所有操作.git/BISECT_LOG
。虽然此日志与正常操作无关,但自己摆弄 refs 将导致无意义的日志。当然,您可以忽略它或相应地修复日志,但这并不比您链接的解决方案更好。
所以,是的,这是可以做到的,但要付出代价。总而言之,保存日志、修复它并重放它似乎是更好的选择。