在Git中,有時候我們需要將一個倉庫中的某個模組複製到另一個倉庫中,並且還需要保留提交記錄。這個時候我們可以使用Git subtree命令來實現。
例如:將本地某個倉庫中的design-pattern
資料夾下的所有檔案拿出來作為一個新倉庫
以下是具體操作步驟:
- 進入舊倉庫中,使用以下命令將需要複製的模組分離出來,建立一個新分支:
git subtree split --prefix=design-pattern -b dp
這個命令會在當前倉庫中建立一個名為dp的新分支,並將design-pattern模組的提交記錄複製到這個分支中。
- 切換到dp分支,使用以下命令新增一個新的遠端倉庫:
git remote add dp_orign git@gitee.com:forxiaoming/design-pattern.git
這個命令會將一個名為dp_orign的遠端倉庫新增到當前倉庫中。
- 將dp分支推送到新的遠端倉庫中:
git push dp_orign dp
這個命令會將dp分支推送到dp_orign遠端倉庫中。
接下來只需要在新倉庫中將 dp分支合併到主分支即可
- 進入新倉庫中,使用以下命令拉取新的提交記錄:
git pull
#From gitee.com:forxiaoming/design-pattern
# * [new branch] dp -> origin/dp
這個命令會拉取dp分支中的提交記錄到新倉庫中。
- 將本地分支與遠端分支同步:
git fetch origin
這個命令會將遠端分支的最新提交記錄拉取到本地。
- 切換到dp分支:
git branch
# * master
git branch -r
# origin/HEAD -> origin/master
# origin/dp
# origin/master
git checkout dp
- 這時可以看到
dp
分支下有之前舊倉庫推送過來的檔案
ls
#README.md
# ...
- 切換回主分支:
git checkout master
- 將dp分支合併到主分支中:
git merge --allow-unrelated-histories dp
這個命令會將dp分支的提交記錄合併到主分支中。
在使用
git merge
命令合併兩個分支時,如果兩個分支的提交記錄沒有共同的祖先,即它們的提交歷史沒有交集,那麼 Git 會認為這兩個分支是不相關的,不能直接合並。這時候會出現以下錯誤提示:fatal: refusing to merge unrelated histories
為了在這種情況下也能夠合併分支,需要使用
--allow-unrelated-histories
引數。這個引數的作用是允許合併兩個沒有共同祖先的分支,即使 Git 認為它們是不相關的。
- 推送到遠端倉庫:
git push
- 刪除本地
dp
分支:
git branch -d dp
- 刪除遠端dp分支:
git push origin --delete dp
這樣就完成了將一個倉庫中的某個模組複製到另一個倉庫中,並且保留了提交記錄的操作。