在同一个repo中将提交从一个子树应用到另一个子树

时间:2013-10-11 19:57:09

标签: git version-control

我一直在使用git-p4将部分Perforce repo克隆到git repo中。我签出的树有以下Perforce“分支”结构:

回复/释放A
repo / releaseB
repo / featureA
回购/ featureB

我在本地git repo中有一堆git提交到featureA目录;但是,我想将这些提交“重新绑定”到featureB目录中。有没有办法将最初应用于一个目录的一组补丁/提交转换为另一个目录?

2 个答案:

答案 0 :(得分:3)

是的。如果您的提交仅影响 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任何内容的任何修补程序。

答案 1 :(得分:0)

  • 如果您只想选择一个提交,请使用

    git cherry-pick <commit-id>

  • 如果您要应用从C1Cx的一系列提交,请使用rebase --onto

    git rebase --onto featureB C1 Cx