当前解决方案:主要是变基
用几个cherrypicks进行一些rebase就可以了,但到目前为止我还没有找到使用单个命令的自动化方法。利用
git rebase -s subtree -Xsubtree=sub --onto sub_master proj_ini proj_end
sub_master
将所有顶级proj
提交从 ref proj_ini
(不包括)复制到子项目主分支上 ref proj_end
(包括)。您所在的分支机构无关紧要。对于每次提交,可能会发生以下情况:
仅涉及子项目的提交sub
将被干净地复制
仅涉及外部文件的提交sub
不会显示。由于我们正在变基,因此这些都被默默地忽略了。如果您选择这种类型的提交,则会出现一个错误,告诉您不允许空提交(未来的 Git 版本可能会有git cherry-pick --skip-empty
)
对其内外都有更改的提交sub
将使用完全相同的消息复制,但只保留相关的更改/文件,其余的被完全忽略
重命名/从proj
到移动sub
被干净地重写为创作
合并提交大部分都是干净的,但有一些例外
5.1 明确忽略您对proj
来自sub
.
5.2使用cherrypick显式合并某些涉及冲突解决的合并提交(当前分支必须是sub_master
):
git cherry-pick -x --strategy=subtree -Xsubtree=sub -m 2 merge_ref
每个-m
父母通常是 1 或 2。git cherry-pick --abort
(在实践中,如果我遇到冲突或不需要的更改,我会盲目地尝试其中一个,然后再尝试另一个)