项目解决问题过程中发现引入了新的 bug(原本没有),需要定位引入bug的提交,可以使用git bisect
git bisect <subcommand> <options>
举个例子,编写一个很简单的.c程序,编译通过并将该次提交tag设置为1.00
#include <stdio.h>
int main()
{
int num1, num2;
num1 = 1;
num2 = 2;
printf("The result is %d \n", num1+num2);
return 0;
}
多次提交之后引入新bug
print("The result is %d \n", num1+num2);
之后再次多次提交。
// 启动
git bisect start
// 将当前状态设置为bad
git bisect bad
// 将tag1.00设置为good,距离当前工作状态有139次提交
git bisect good 1.00
二分法找到中间提交,及提交信息
简单验证该次提交是否引入bug
如果引入bug将其设置为bad,未引入bug设置为good,继续二分法查找。
也可以设置简单的验证命令行命令来自动查找,比如
git bisect run cl test1.c
二分法查找到中间提交时会自动运行
cl test1.c
找到最初引入bug的提交
结束(返回当前状态)
git bisect reset
也可以定位到最初检测出bug的提交(需要注意:bisect reset之后就会丢失bug之后的提交,恢复则需要reset)
git bisect reset ****(SHA号)