代碼倉庫遷移-保留歷史提交記錄和分支
一、項目倉庫遷移,保留提交記錄和分支
主要有以下幾種方法:
1. 使用 GitHub 的 Import 功能 (推薦,最簡單):
- 在 GitHub 上新建一個空的倉庫。
- 在新倉庫的 “Import code” 頁面,輸入原倉庫的地址 (例如:
https://github.com/username/original-repo.git或https://gitlab.com/username/original-repo.git)。 - GitHub 會自動克隆原倉庫,包括所有分支和提交記錄。
2. 使用 git clone --mirror 和 git push --mirror (命令行,更靈活):
這是最常用的方法,適用于從任何 Git 平臺遷移到另一個。
# 克隆原倉庫,使用 --mirror 選項保留所有分支和引用。在終端執行(將 URL 替換為你的原始倉庫地址) git clone --mirror https://github.com/username/old-repo.git # 或使用 SSH 地址 # git clone --mirror git@github.com:username/old-repo.git # 進入克隆后的倉庫(注意帶有 .git 后綴) cd old-repo.git # 添加新倉庫的遠程地址 git remote add origin <新倉庫地址> # 或修改遠程地址指向新倉庫 # git remote set-url origin git@github.com:username/new-repo.git # 推送所有內容到新倉庫,使用 --mirror 選項確保所有分支和引用都被推送 git push --mirror
遇到問題:! [remote rejected] master -> master (pre-receive hook declined)

原因:權限問題,Develop角色默認下沒有遠程訪問master的權限
解決方案:
方案一:在項目的【Setting】中的【Protected branches】可以設置哪些分支是被保護的,默認情況下【master】分支是處于被保護狀態下的,develop角色的人是無法提交到master分支的,在下面的【Developers can push】打上鉤就可以了。
方案二:使用其他分支push 入
#方案二: git checkout -b 分支名 git add . git commit -m "提交的信息" git remote add origin 遠程倉庫地址 git push -u origin 分支名
3. 使用 使用 git push --all 和 git push --tags (命令行,簡單但可能不完整):
這種方法相對簡單,但可能不會遷移所有引用,例如 GitHub Actions workflows 或 protected branches 的設置。
# 克隆原倉庫 git clone <原倉庫地址> # 進入克隆后的倉庫 cd <新倉庫本地目錄> # 添加新倉庫的遠程地址 git remote add origin <新倉庫地址> # 推送所有分支 git push --all origin # 推送所有標簽 git push --tags origin
4. Fork (僅限在同一平臺內,例如 GitHub 到 GitHub):
- 在原倉庫頁面點擊 "Fork" 按鈕。
- 這會在你的賬戶下創建一個原倉庫的副本。
- 如果你需要將 Fork 后的倉庫轉移到另一個組織或用戶,可以在倉庫設置中更改 ownership。
選擇哪種方法?
- GitHub Import: 最簡單,推薦首選,尤其適用于從其他平臺遷移到 GitHub。
git clone --mirror和git push --mirror: 最靈活,適用于任何 Git 平臺之間的遷移,也是最完整的遷移方式,推薦用于復雜項目。git push --all和git push --tags: 簡單,但可能不完整,適用于簡單的項目。- Fork: 僅限同一平臺內部遷移,方便快捷,但需要額外的步驟來轉移 ownership。
遷移后檢查:
- 確認所有分支都已遷移:
git branch -a - 確認提交記錄完整:
git log - 確認標簽已遷移:
git tag
一些額外的提示:
- 如果你的倉庫很大,遷移可能需要一些時間。
- 確保你有新倉庫的寫入權限。
- 如果使用 SSH 方式連接,確保你的 SSH key 已添加到新平臺的賬戶中.
- 對于私有倉庫,需要在新平臺上重新設置訪問權限。
- 一些 CI/CD 配置可能需要在新倉庫中重新配置。
二、項目倉庫遷移,遷移一個分支和提交記錄
從A倉庫只推送某個分支到B倉庫,終端驗證操作截圖如下:

要將 A倉庫 的某個特定分支(例如 分支a)推送到 B倉庫,并保留提交歷史,可以按照以下步驟操作:
步驟 1:克隆 A 倉庫(如果尚未克隆)
git clone https://github.com/username/old-repo.git cd old-repo # 進入克隆后的倉庫
假設將A倉庫已存在的develop/migration分支推送到B倉庫,先拉分支代碼,再切換分支
git fetch origin develop/migration
git checkout develop/migration
步驟 2:添加 B 倉庫作為新的遠程倉庫
git remote add new-origin git@github.com:username/new-repo.git
步驟 3:推送 分支a 到 B 倉庫
方法 1:直接推送(如果 B 倉庫允許)
git push new-origin 分支a:分支a
- 如果
分支a在 B 倉庫不存在,會直接創建。 - 如果 B 倉庫已有
分支a,但允許強制推送(--force),可以:
git push new-origin 分支a:分支a --force
方法 2:先拉取 B 倉庫的 分支a(如果已存在)
如果 B 倉庫已有 分支a,并且不能強制推送(--force),可以嘗試:
git fetch new-origin 分支a git checkout 分支a git merge new-origin/分支a # 或使用 `git rebase` git push new-origin 分支a
步驟 4:驗證推送是否成功
git remote -v # 查看遠程倉庫 git branch -a # 查看所有分支 git log --oneline # 檢查提交歷史

浙公網安備 33010602011771號