我一直在使用 git-p4 将 Perforce 存储库的一部分克隆到 git 存储库中。我签出的树具有以下 Perforce“分支”结构:
repo/releaseA
repo/releaseB
repo/featureA
repo/featureB
我在本地 git 存储库中有一堆 git 提交到 featureA 目录;但是,我想将这些提交“变基”到 featureB 目录中。有没有办法将最初应用于一个目录的一组补丁/提交转换到另一个目录?
我一直在使用 git-p4 将 Perforce 存储库的一部分克隆到 git 存储库中。我签出的树具有以下 Perforce“分支”结构:
repo/releaseA
repo/releaseB
repo/featureA
repo/featureB
我在本地 git 存储库中有一堆 git 提交到 featureA 目录;但是,我想将这些提交“变基”到 featureB 目录中。有没有办法将最初应用于一个目录的一组补丁/提交转换到另一个目录?
是的。如果您的提交仅 repo/featureA
影响这将非常容易:
mkdir patches
git format-patch -o patches master..my_featureA_branch
git am patches/* -p3 --directory=repo/featureB
你就完成了。
如果您的提交更改了 repo/featureA 之外的文件,则需要将其删除,
cat >mystuff.sed <<\EOD
/^(From [0-9a-f]{40}|diff --git )/!{H;$!d}
x
/^From /b
${h;s,.*--,--,;x}
\,^diff[^\n]* [ab]/repo/featureA/,!{$!d;x;b}
${p;x}
EOD
和
sed -s -i -r -f mystuff.sed patches/*
之前git am
。repo/featureA
在这种情况下,任何对你没有任何影响的补丁都必须这样做git am --skip
。
如果您只想选择一个提交然后使用,
git cherry-pick <commit-id>
如果要应用从C1
to开始的一系列提交Cx
,请使用rebase --onto
git rebase --onto featureB C1 Cx