2013-10-11 129 views
1

我一直在使用git-p4將一個Perforce回購的部分克隆到一個git回購中。我已經簽出該樹具有以下Perforce的 「分支」 的結構:在同一個回購中應用從一個子樹到另一個的提交

回購/ releaseA
回購/ releaseB
回購/ featureA
回購/ featureB

我有一大堆的git的承諾我的本地git回購featureA目錄;不過,我想將這些提交「改名」到featureB目錄中。有沒有辦法將最初應用於一個目錄的一組補丁/提交轉換爲另一個目錄?

回答

3

是的。如果您提交影響只有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之間。

+0

第一種情況正是我所需要的。但是,我必須使用「-p2」才能使其工作,因爲我的示例中的「repo」目錄實際上是根目錄。 – animus144

+0

> 5分鐘編輯:我使用了「-p2」和「--directory = featureB」,因爲「repo」目錄是回購根目錄。 – animus144

0
  • ,如果你只想挑一個單一提交後方可使用,

    git cherry-pick <commit-id>

    如果你想申請的一系列
  • 承諾開始從C1Cx,然後用rebase --onto

    git rebase --onto featureB C1 Cx

+0

提問者想知道如何在同一個git倉庫中從一個目錄提交到另一個目錄。那麼你的答案如何幫助? – villekulla

+0

'我有一堆git提交在我的本地git repo到featureA目錄中'意味着OP有多個回購! –

+0

對我來說,這聽起來只有一個git回購。我會問 – villekulla

相關問題