我正在通过命令行做一个非自动化的git平分。一切都很顺利,直到我不小心在命令历史记录中的错误行上按了return,而不是运行测试,我运行'git bisect good'(或bad)。哎呀——我还不知道这个提交应该被标记为好还是坏,但这就是我所做的。

我可以撤销'git bisect good'命令,或者让git忘记它的结果,然后返回并运行该提交的测试吗?


当前回答

如果你想一次性撤销你的上一条指令,而不需要使用文本编辑器,你可以使用以下命令:

git bisect log | head -n -2 > /tmp/fixed_bisect.log ; git bisect replay /tmp/fixed_bisect.log

它将删除日志的最后两行(因为有一个注释+它对应的实际命令),然后将其保存到文件中,并直接使用平分重播重用它。(不幸的是,平分重放不能直接通过管道接收输入,所以它需要创建一个临时的中间文件。)

为了让它更简单,你可以在你的.bashrc或等效文件中添加一个别名:

# bisect undo alias
alias bisectundo="git bisect log | head -n -2 > /tmp/fixed_bisect.log ; git bisect replay /tmp/fixed_bisect.log"

在新的会话中,您将能够简单地使用bisectundo后退一步。

其他回答

您可以输出使用所做操作的记录

$ git bisect log > bisect.log

在编辑器中打开该文件并编辑/删除错误行。然后你可以用

$ git bisect replay bisect.log

这在git帮助平分中有记录。

在git-bisect文档中:

对日志和重放进行等分 在将修订标记为好或坏之后,发出以下命令来显示到目前为止所做的工作: $ git平分日志 如果发现在指定修订的状态时犯了错误,可以将此命令的输出保存到一个文件中,编辑该文件以删除不正确的条目,然后发出以下命令以返回更正的状态: $ git平分重置 $ git平分重放那个文件

如果你想一次性撤销你的上一条指令,而不需要使用文本编辑器,你可以使用以下命令:

git bisect log | head -n -2 > /tmp/fixed_bisect.log ; git bisect replay /tmp/fixed_bisect.log

它将删除日志的最后两行(因为有一个注释+它对应的实际命令),然后将其保存到文件中,并直接使用平分重播重用它。(不幸的是,平分重放不能直接通过管道接收输入,所以它需要创建一个临时的中间文件。)

为了让它更简单,你可以在你的.bashrc或等效文件中添加一个别名:

# bisect undo alias
alias bisectundo="git bisect log | head -n -2 > /tmp/fixed_bisect.log ; git bisect replay /tmp/fixed_bisect.log"

在新的会话中,您将能够简单地使用bisectundo后退一步。