本博客实操的仓库位置:https://github.com/alphaRaWaY/CSU_SE_SSD4_exp.git
如何正常合并两个git仓库
动机
某个不想干活的下午,整理自己github仓库发现很多诸如“实验一”、“xxx-前端”、“xxx-后端”这种项目,每个都小小的完全可以汇总到一起,但是我又想保留他们原先作为独立仓库的历史。
下面我以我当时操作的具体的仓库为例讲讲如何合并多个git仓库
子仓库
- 实验二
- 实验三
- 实验四
操作步骤
添加远程
# 添加远程
git remote add exp2 https://github.com/alphaRaWaY/CSU_SE_SSD4_exp2.gitgit remote add exp3 https://github.com/alphaRaWaY/CSU_SE_SSD4_exp3.gitgit remote add exp4 https://github.com/alphaRaWaY/CSU_SE_SSD4_exp4.git# 可选择查看所有远程
git remote -v
抓取各个子仓库的历史
核心,这么多操作的主要目的就是合并仓库的同时保留仓库历史
# 抓取历史
git fetch exp2
git fetch exp3
git fetch exp4# 确认抓取成功和仓库的默认分支名
git remote show exp2
git remote show exp3
git remote show exp4
把子仓库并入当前仓库
把子仓库的所有文件放到对应位置,并且把提交历史也并入父仓库
# 注意根据实际的子目录分支修改分支名
git subtree add --prefix=exp2 exp2 master
git subtree add --prefix=exp3 exp3 master
git subtree add --prefix=exp4 exp4 master

推送
恭喜你获得了一个包含了多个子仓库历史的汇总仓库,现在可以把它提交到任意一个你想放的地方
git push [remote] [branch]
后续
- 子仓库和父仓库独立,当然你可以选择直接删除子仓库并且以后只维护父亲仓库
- 或者你担心删了找不回来也可以在github临时归档

# 根据选择你可以删除远程,或者保留远程更新子仓库的同时在父仓库同步
git remote remove exp2
git remote remove exp3
git remote remove exp4

如何在合并两个git仓库的同时保留他们的历史信息