我正在嵌入式项目中使用Linux内核。当我开始时,我使用 git 从 kernel.org 克隆当时的稳定版本 3.14.2。随着新的 3.14 内核发布,我可以使用 git rebase 升级到它们。例如,我通过使用升级到 3.14.10
git checkout linux-3.14.y
git pull
git checkout myproject
git rebase v3.14.10
但是,如果我尝试使用升级到3.15系列
git checkout linux-3.15.y
git pull
git checkout myproject
git rebase v3.15.3
或
git merge v3.15.3
我在从未接触过的文件上遇到 git merge 冲突。
是否有推荐的从 3.14.10 升级到 3.15.3 的方法?
最佳答案
这就是正在发生的事情。假设起始提交图如下所示:
-------------------------------------- myproject
/
/
-----------/---------------------------------o------ linux-3.14.y
/ C v3.14.10
/ B
----/---------------------------\-------------------------- master
A \
\
--------------------o--- linux-3.15.y
v3.15.3
我不知道它到底是不是这样,但它说明了问题。
当 rebase 时,git 在历史记录中搜索属于当前分支和指定的“上游”分支的第一个提交。它收集所有这些提交以进行 rebase 操作。
当指定的“上游”是最初创建当前分支的分支时,收集的提交仅包括我自己在当前分支上的提交,因此不存在冲突。
当指定的“上游”不是最初创建当前分支的分支时(“git rebase v3.15.3”就是这种情况),收集的提交包括不是我自己的提交。在示例中,收敛点是提交 A,并且 rebase 操作将包括从点 A 到 myproject 的所有内容。 A 点和 C 点之间的那些可能不适合所需的操作。
相反,需要继续使用 linux-3.14.y 作为“上游”分支,以便识别哪些提交要 rebase ,但要指定一个单独的提交来将这些提交 rebase 。这就是“--onto”开关的用途。所以将myproject移植到v3.15.y内核所需的操作是
git checkout myproject
git rebase linux-3.14.y --onto v3.15.3
关于linux - 什么 git 操作将我的更改从内核 3.14.y 移植到 3.15.y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24602081/