將倉庫下某個模組複製到新倉庫並保留提交記錄(非子庫)

小鳴Cycling發表於2023-05-11

在Git中,有時候我們需要將一個倉庫中的某個模組複製到另一個倉庫中,並且還需要保留提交記錄。這個時候我們可以使用Git subtree命令來實現。
例如:將本地某個倉庫中的design-pattern資料夾下的所有檔案拿出來作為一個新倉庫

以下是具體操作步驟:

  1. 進入舊倉庫中,使用以下命令將需要複製的模組分離出來,建立一個新分支:
git subtree split --prefix=design-pattern -b dp

這個命令會在當前倉庫中建立一個名為dp的新分支,並將design-pattern模組的提交記錄複製到這個分支中。

  1. 切換到dp分支,使用以下命令新增一個新的遠端倉庫:
git remote add dp_orign git@gitee.com:forxiaoming/design-pattern.git

這個命令會將一個名為dp_orign的遠端倉庫新增到當前倉庫中。

  1. 將dp分支推送到新的遠端倉庫中:
git push dp_orign dp

這個命令會將dp分支推送到dp_orign遠端倉庫中。

接下來只需要在新倉庫中將 dp分支合併到主分支即可

  1. 進入新倉庫中,使用以下命令拉取新的提交記錄:
git pull
#From gitee.com:forxiaoming/design-pattern
# * [new branch]      dp         -> origin/dp

這個命令會拉取dp分支中的提交記錄到新倉庫中。

  1. 將本地分支與遠端分支同步:
git fetch origin

這個命令會將遠端分支的最新提交記錄拉取到本地。

  1. 切換到dp分支:
git branch
# * master

git branch  -r
#  origin/HEAD -> origin/master
#  origin/dp
#  origin/master

git checkout dp
  1. 這時可以看到 dp 分支下有之前舊倉庫推送過來的檔案
ls
#README.md
# ...
  1. 切換回主分支:
git checkout master
  1. 將dp分支合併到主分支中:
git merge --allow-unrelated-histories dp

這個命令會將dp分支的提交記錄合併到主分支中。

在使用 git merge 命令合併兩個分支時,如果兩個分支的提交記錄沒有共同的祖先,即它們的提交歷史沒有交集,那麼 Git 會認為這兩個分支是不相關的,不能直接合並。這時候會出現以下錯誤提示:

fatal: refusing to merge unrelated histories

為了在這種情況下也能夠合併分支,需要使用 --allow-unrelated-histories 引數。這個引數的作用是允許合併兩個沒有共同祖先的分支,即使 Git 認為它們是不相關的。

  1. 推送到遠端倉庫:
git push
  1. 刪除本地dp分支:
git branch -d dp
  1. 刪除遠端dp分支:
git push origin --delete dp

這樣就完成了將一個倉庫中的某個模組複製到另一個倉庫中,並且保留了提交記錄的操作。

相關文章