3

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

repo/releaseA
repo/releaseB
repo/featureA
repo/featureB

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

4

2 回答 2

5

是的。如果您的提交 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 amrepo/featureA在这种情况下,任何对你没有任何影响的补丁都必须这样做git am --skip

于 2013-10-11T23:28:36.247 回答
0
  • 如果您只想选择一个提交然后使用,

    git cherry-pick <commit-id>

  • 如果要应用从C1to开始的一系列提交Cx,请使用rebase --onto

    git rebase --onto featureB C1 Cx

于 2013-10-11T20:18:29.210 回答