將倉庫下某個模塊復制到新倉庫并保留提交記錄(非子庫)
在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
- 刪除步驟2中的新遠程倉庫
dp_orign
git branch -a
* master
remotes/dp_orign/dp
remotes/dp_orign/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
git remote rm dp_orign
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
這樣就完成了將一個倉庫中的某個模塊復制到另一個倉庫中,并且保留了提交記錄的操作。

浙公網安備 33010602011771號