如何正确地从linux内核git树中挑选有问题的提交

时间:2017-09-29 18:41:20

标签: linux git linux-kernel

背景

从Linux内核版本4.12及更高版本开始,我的设备无法正常工作。我想找出导致问题的具体提交。我目前的流程是:

  1. here
  2. 查看linux内核提交日志
  3. 单击单个提交,复制提交ID
  4. 运行git checkout <commit id>
  5. 重新配置内核make menuconfig,然后重新编译make -j32
  6. 在我的设备上安装内核,确认问题是否仍然存在
  7. 如果没有,请缩小提交范围,返回步骤1
  8. 问题

    当我经历这个繁琐的过程时,我发现编译的内核版本不同(您也可以通过阅读Makefile来查看)。 但是,我没有通过linux内核提交日志看到版本更改。实际上,在尝试git diff <first commit id> <second commit id>之后,根据linux内核,第二个提交id为1,在第一个提交后面提交在步骤1中提交日志,发现有些更改未反映在网站上。

    问题

    为什么会这样?我该如何正确找出导致设备出现问题的具体提交?

1 个答案:

答案 0 :(得分:3)

为了正确找出导致设备出现问题的提交,您应该使用git bisect。它可以自动完成您手动完成的工作流程。请参阅文档here

  

此命令使用二进制搜索算法查找中的提交   你的项目历史引入了一个bug。你首先告诉它使用它   它是一个“坏”提交,已知包含该错误,并且“好”   在引入错误之前已知的提交。然后是git   bisect在这两个端点之间选择一个提交并询问您是否   选定的提交是“好”或“坏”。它继续缩小   范围,直到找到引入更改的确切提交。