我正在通过命令行进行非自动化的git二分法。一切顺利,直到我在命令历史记录中误按了一个错误的行并执行了“git bisect good”(或bad)而不是运行测试。糟糕 - 我还不知道这个提交应该被标记为好或坏,但我已经这样做了。
我能撤销“git bisect good”命令,或使git忘记它的结果,并回去运行那个提交的测试吗?
我正在通过命令行进行非自动化的git二分法。一切顺利,直到我在命令历史记录中误按了一个错误的行并执行了“git bisect good”(或bad)而不是运行测试。糟糕 - 我还不知道这个提交应该被标记为好或坏,但我已经这样做了。
我能撤销“git bisect good”命令,或使git忘记它的结果,并回去运行那个提交的测试吗?
来自git-bisect文档:
二分日志和二分重现
在标记了好的或者坏的版本之后,执行以下命令以显示到目前为止已经完成的工作:
$ git bisect log
如果您发现在指定修订版本的状态时犯了错误,您可以将此命令的输出保存到文件中,编辑该文件以删除不正确的条目,然后发出以下命令以返回到已更正的状态:$ git bisect reset
$ git bisect replay that-file
$ git bisect log > bisect.log
在编辑器中打开那个文件并编辑/删除错误的那一行,然后你就可以重放它了
$ git bisect replay bisect.log
详细信息请参考git help bisect
。
git bisect reset
? - Colin Dgit bisect log | head -n -2 > /tmp/fixed_bisect.log ; git bisect replay /tmp/fixed_bisect.log
它将删除日志的最后两行(因为有注释和实际对应的命令),然后将其保存到文件中,并直接使用 bisect replay
重用它。(不幸的是,bisect replay
无法直接通过管道接收输入,因此需要创建一个临时中间文件。)
为了使它更容易,您可以在 .bashrc 或等效文件中添加别名:
# bisect undo alias
alias bisectundo="git bisect log | head -n -2 > /tmp/fixed_bisect.log ; git bisect replay /tmp/fixed_bisect.log"
bisectundo
来后退一步。
如果您因为负数参数而收到“非法行计数”错误(这是因为某些head
实现不支持它),您可以使用这个更长的形式,它基于使用wc
计算日志长度来确定要保留的行数:
git bisect log | head -n $(($(git bisect log | wc -l)-2)) > /tmp/fixed_bisect.log ; git bisect replay /tmp/fixed_bisect.log
head: illegal line count -- -2
的错误。 - henrique
git bisect log > f; vim f; git bisect reset; git bisect replay f;
。 - oligofrenrm f
(或rm that-file
):) 我知道这很明显,但当我看到留下未使用文件的指令时,它会让我感到不爽(我知道在这种情况下,由于是关于 git 存储库,你会注意到它,但并非总是如此)。 - Iulian Onofreigit bisect undo
的东西,这将非常不错... - BallpointBen.gitconfig
中为此添加一个别名:bisect-undo ='git bisect log | sed -e'$ d'> /tmp/trimmed-log; git bisect reset; git bisect replay /tmp/trimmed-log; rm /tmp/trimmed-log;
。然后他可以随心所欲地执行git bisect-undo
:) - oligofren