如何正确挑选樱桃从Linux内核的git树问题提交
我有工作不正常的Linux内核版本4.12及以上的启动装置。我想找出哪个具体的提交导致了这个问题。我现在的流程是:
- 查看Linux内核在here
- 点击个人提交提交日志,复制提交ID
- 运行
git checkout <commit id>
- 重新配置内核
make menuconfig
,并重新编译make -j32
- 在我的设备上安装内核,确认问题是否仍然存在
- 如果不是,缩小提交范围,返回t ○步骤1
的问题
虽然我正在经历这种繁琐的过程中,我发现了编译的内核版本是不同(也可以经由读取Makefile
查看此)。 但是,我没有看到通过linux内核提交日志进行的版本更改。事实上,在尝试git diff <first commit id> <second commit id>
之后,根据第1步中的Linux内核提交日志,第二个提交ID为1的提交后面的第一个提交后,发现存在未反映在网站上的更改。
问题
为什么这是怎么回事?我应该如何正确找出导致我的设备出现问题的特定提交?
为了正确找出哪些提交导致您的设备上的问题,您应该使用git bisect
。它可以自动执行您手动执行的工作流程。请参阅文档here。
此命令使用二进制搜索算法来找到 项目的历史,其承诺推出的错误。通过首先告知 它是一个已知包含错误的“错误”提交,以及在引入错误之前已知的“良好”提交。然后git bisect挑选这两个端点之间的提交,并询问您选择的提交是“好”还是“差” 。它继续缩小范围 ,直到它找到引入更改的确切提交。
谢谢,我会试试看。但它仍然没有回答为什么来自网站的提交日志与'git diff'不同的问题。我手动确定了导致问题的提交ID,但是我仍然无法找出哪个提交产生/修改了导致错误的问题文件。 –
您可能正在尝试使用* merge * commit处理,而提交的问题是*非合并*。下面的答案指向正确的方向。 – 0andriy