2014-02-11 43 views
4

有一種簡單的方法來移動子樹使用其他條件下的CMDgit的子樹添加:改變前綴保留本地提交

git subtree add --prefix=<prefix> <repository> <commit> 

加入,是有可能改變的前綴從dir1dir2

git subtree: possible to change subtree branch/path in a forked repository?的答案建議刪除子樹,然後將其添加回來。

它不適合我,因爲我需要保留本地提交,有沒有另一種方式?

+0

使用本地提交是指在添加子樹後對該子目錄中文件的更改? – LopSae

回答

4

一種選擇是從當前的拆分承諾,其中包括您希望保留本地提交:

git subtree split --prefix=dir1 HEAD 

# Create a branch with the printed commit just to use it later 
git branch split_dir_1 <split_commit> 

然後做在question you mentioned中描述的那樣,刪除子目錄並重新添加的子樹。

git rm dir1 
git commit 
git subtree add --prefix=dir2 . split_commit 

記住,這樣做,你仍然可以在倉庫的歷史,看在創建時的第一子樹和刪除並重新添加。

+0

感謝你的回答,你可以用你的方法做git subtree pull嗎?我必須測試它...將接受你的答案,如果它的工作,謝謝 – klarezz

+0

應該是可以的,是的。只要在子樹操作中不涉及壓縮,'git subtree split'將保留子樹的原始歷史。您可以將新的拆分分支推送到原始的子樹存儲庫,因此,您應該也能夠拉動。 – LopSae

+0

恐怕我壓扁了...... – klarezz