我一直在使用git-p4将部分Perforce repo克隆到git repo中。我签出的树有以下Perforce“分支”结构:
回复/释放A我在本地git repo中有一堆git提交到featureA目录;但是,我想将这些提交“重新绑定”到featureB目录中。有没有办法将最初应用于一个目录的一组补丁/提交转换为另一个目录?
答案 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>
如果您要应用从C1
到Cx
的一系列提交,请使用rebase --onto
git rebase --onto featureB C1 Cx