我一直在使用git-p4將一個Perforce回購的部分克隆到一個git回購中。我已經簽出該樹具有以下Perforce的 「分支」 的結構:在同一個回購中應用從一個子樹到另一個的提交
回購/ releaseA
回購/ releaseB
回購/ featureA
回購/ featureB
我有一大堆的git的承諾我的本地git回購featureA目錄;不過,我想將這些提交「改名」到featureB目錄中。有沒有辦法將最初應用於一個目錄的一組補丁/提交轉換爲另一個目錄?
我一直在使用git-p4將一個Perforce回購的部分克隆到一個git回購中。我已經簽出該樹具有以下Perforce的 「分支」 的結構:在同一個回購中應用從一個子樹到另一個的提交
回購/ releaseA
回購/ releaseB
回購/ featureA
回購/ 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
就大功告成了。
如果您提交修改之外回購文件/ 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
到Cx
,然後用rebase --onto
git rebase --onto featureB C1 Cx
提問者想知道如何在同一個git倉庫中從一個目錄提交到另一個目錄。那麼你的答案如何幫助? – villekulla
'我有一堆git提交在我的本地git repo到featureA目錄中'意味着OP有多個回購! –
對我來說,這聽起來只有一個git回購。我會問 – villekulla
第一種情況正是我所需要的。但是,我必須使用「-p2」才能使其工作,因爲我的示例中的「repo」目錄實際上是根目錄。 – animus144
> 5分鐘編輯:我使用了「-p2」和「--directory = featureB」,因爲「repo」目錄是回購根目錄。 – animus144