如何正确挑选樱桃从Linux内核的git树问题提交

问题描述:

背景如何正确挑选樱桃从Linux内核的git树问题提交

我有工作不正常的Linux内核版本4.12及以上的启动装置。我想找出哪个具体的提交导致了这个问题。我现在的流程是:

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

的问题

虽然我正在经历这种繁琐的过程中,我发现了编译的内核版本是不同(也可以经由读取Makefile查看此)。 但是,我没有看到通过linux内核提交日志进行的版本更改。事实上,在尝试git diff <first commit id> <second commit id>之后,根据第1步中的Linux内核提交日志,第二个提交ID为1的提交后面的第一个提交后,发现存在未反映在网站上的更改。

问题

为什么这是怎么回事?我应该如何正确找出导致我的设备出现问题的特定提交?

+0

您可能正在尝试使用* merge * commit处理,而提交的问题是*非合并*。下面的答案指向正确的方向。 – 0andriy

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

此命令使用二进制搜索算法来找到 项目的历史,其承诺推出的错误。通过首先告知 它是一个已知包含错误的“错误”提交,以及在引入错误之前已知的“良好”提交。然后git bisect挑选这两个端点之间的提交,并询问您选择的提交是“好”还是“差” 。它继续缩小范围 ,直到它找到引入更改的确切提交。

+0

谢谢,我会试试看。但它仍然没有回答为什么来自网站的提交日志与'git diff'不同的问题。我手动确定了导致问​​题的提交ID,但是我仍然无法找出哪个提交产生/修改了导致错误的问题文件。 –