特定(嵌入式)linux内核repo的维护者修改了一堆古老的提交以清理历史.因此,所有提交都有不同的SHA.
当我从这个重写的历史中获取git时,我需要将我的本地分支重新定位到本地跟踪分支入口点,该入口点对应于我自己的分支开始的本地树中的点.标准方案:
git rebase --onto SHAxx master ownbranch
Run Code Online (Sandbox Code Playgroud)
(SHAxx对应于下图中遥控器/ origin/master的c2).
但是,当我有几个自己的分支在master中有一个单独的祖先时,我必须为每个分支应用一个rebase.相反,我希望将所有带有任何关联标记的分支转移到单个操作中的获取跟踪分支中的新入口点.
在图形上,获取之后的状态,在任何操作之前(简化 - 超越左侧是深度主历史记录):
c1'--c2'--c3'--c4'--c5'--c6'--c7--c8--c9 remotes/origin/master
/
--o--c1--c2--c3--c4--c5--c6 master
\
o---o---o---o---o branch1
\
o---o branch2 (etc.)
Run Code Online (Sandbox Code Playgroud)
确切地说:当我自己的工作从主提交c2开始时,我希望将我自己的子树及其所有标签(如果存在)在一个动作中重新定义到遥控器/ origin/master的c2'(与主人的c2相比具有不同的SHA) ).
那时我可以完全删除master并使用我自己的工作制作遥控器/ origin /掌握新的master:
c1--c2--c3--c4--c5--c6 (old master, not referenced anymore)
/
--o--c1'--c2'--c3'--c4'--c5'--c6'--c7--c8--c9 master = remotes/origin/master
\
o---o---o---o---o branch1
\
o---o branch2 (etc.)
Run Code Online (Sandbox Code Playgroud)
然后我将测试构建过程是否产生与之前相同的结果,如果确定:继续将合并的主更新递增(例如,每个子索引在2.6.nn中的步骤)到我自己的(特定于板)分支中.
或者是否有其他/更好的方法来实现相同的结果?
Rebasing包括其所有子项的分支都提供了一种可能的解决方案,但标签不会移动.