使用git bisect定位函数删除提交时得到错误结果的问题
解决git bisect定位函数删除提交失败的问题
问题根源
你手动切换分支再标记good/bad的操作,容易引发分支状态混乱,导致bisect逻辑出错;另外,你只是手动执行grep但没把返回值传递给bisect——bisect需要测试命令返回0代表good(函数存在)、非0代表bad(函数不存在),缺少这个自动判断逻辑,bisect无法正确识别中间提交的状态。
修正后的bisect操作步骤
- 先重置bisect环境,清除残留状态:
git bisect reset
- 直接在bisect启动时指定bad和good版本,无需手动切换分支:
git bisect start xilinx-v2022.1 xilinx-v2017.4
注意顺序:
git bisect start <bad版本> <good版本>,新版本是bad,旧版本是good
- 编写自动测试脚本
test_cdma.sh,让bisect自动判断提交状态:
#!/bin/bash # grep -q 静默模式,找到内容返回0(good),没找到返回1(bad) grep -q "xilinx_cdma_prep_sg" drivers/dma/xilinx/*.c exit $?
给脚本添加执行权限:
chmod +x test_cdma.sh
- 让bisect调用脚本自动完成测试:
git bisect run ./test_cdma.sh
执行后bisect会自动遍历中间提交,最终定位到删除该函数的具体提交。
备选方案:直接搜索相关提交
如果bisect仍有异常,可直接用git的pickaxe功能定位函数变更记录:
# 查找所有涉及该函数变更的提交 git log -S"xilinx_cdma_prep_sg" -- drivers/dma/xilinx/
这个命令会列出所有添加/修改/删除该函数的提交,从结果里找到最后一次出现该函数的提交,后续的相关提交大概率就是删除它的操作。
额外注意事项
- 确保本地仓库拉取了xilinx-v2017.4到xilinx-v2022.1之间的所有提交,无遗漏
- 若遇到合并提交导致bisect无法判断,可执行
git bisect skip跳过该提交
内容的提问来源于stack exchange,提问作者Arthur Moraes Do Lago
相关产品推荐
相关产品推荐

