Git 在同一回购协议中将提交从一个子树应用到另一个子树

Git 在同一回购协议中将提交从一个子树应用到另一个子树,git,version-control,Git,Version Control,我一直在使用git-p4将Performce回购的一部分克隆到git回购中。我签出的树具有以下Perforce分支结构: 回购/解除A 回购/解除B 回购/回购 回购/特征b 我在本地git repo中有一堆git提交到featureA目录;但是,我想将这些提交重新设置到featureB目录。有没有办法将最初应用于一个目录的一组修补程序/提交转换为另一个目录 如果只想选择一个提交,请使用 吉特樱桃采摘 如果要应用从C1到Cx的一系列提交,请使用 git rebase-在功能B C1 Cx上 如果

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

回购/解除A 回购/解除B 回购/回购 回购/特征b

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

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

吉特樱桃采摘

如果要应用从C1到Cx的一系列提交,请使用

git rebase-在功能B C1 Cx上

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

吉特樱桃采摘

如果要应用从C1到Cx的一系列提交,请使用

git rebase-在功能B C1 Cx上


是的。如果您的提交仅影响回购/交易,那么这将非常容易:

mkdir patches
git format-patch -o patches master..my_featureA_branch

git am patches/* -p3 --directory=repo/featureB
你完成了

如果您在repo/Feature之外提交更改文件,则需要将其删除

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

在git am之前。在这种情况下,任何对回购/交易没有任何影响的补丁都必须git am-skip。

是的。如果您的提交仅影响回购/交易,那么这将非常容易:

mkdir patches
git format-patch -o patches master..my_featureA_branch

git am patches/* -p3 --directory=repo/featureB
你完成了

如果您在repo/Feature之外提交更改文件,则需要将其删除

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

在git am之前。在repo/featureA中,任何补丁都不会影响任何东西,在这种情况下,您必须git am-skip。

提问者想知道如何在同一git存储库中重新设置从一个目录到另一个目录的提交的基础。那么你的回答会有什么帮助呢?“我在本地git repo中有一堆git提交到featureA目录”意味着OP有多个repo!对我来说,听起来他只有一个吉特回购。我会的ask@villekullarebase在git中有一个特定的含义,这不是OP想要的。@jthill我理解。在某种程度上,他写的是rebase而不是rebase。我只是想说,在5月份的意见中,OP只有一个git repo,他只是想从一个子目录向另一个子目录应用大量提交。提问者想知道如何在同一git存储库中从一个目录向另一个目录重新设置提交的基础。那么你的回答会有什么帮助呢?“我在本地git repo中有一堆git提交到featureA目录”意味着OP有多个repo!对我来说,听起来他只有一个吉特回购。我会的ask@villekullarebase在git中有一个特定的含义,这不是OP想要的。@jthill我理解。在某种程度上,他写的是rebase而不是rebase。我只是想说,在5月份的意见中,OP只有一个git回购,他只是想从一个子目录向另一个子目录应用一些提交。但是,我必须使用-p2使其工作,因为我的示例中的repo dir实际上是根。>5分钟编辑:我使用-p2和-directory=featureB,因为repo dir是repo根。第一种情况正是我需要的。但是,我必须使用-p2使其工作,因为我的示例中的repo dir实际上是根。>5分钟编辑:我使用了-p2和-directory=featureB,因为repo dir是repo根。