git 分离子仓库
将现有 git repo 中的子目录独立为新 repo,并保留其相关的提交历史。
git subtree
- 将 folder路径对应的所有提交信息 保存为一个新分支
git subtree split -P <folder> -b <new-branch>
- 将新分支保存为一个单独项目
mkdir <repo>
git init
git pull <path> <name-of-new-branch>
git filter-branch
1. 克隆一份项目到新路径, 并删除远程分支
git clone <big-repo> <new-repo>
cd <new-repo>
git remote rm origin
2. 过滤所有历史提交,只保留所有对指定子目录有影响的提交,并将该子目录设为该仓库的根目录
git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter <name-of-folder> -- --all
--tag-name-filter 该参数控制我们要如何处理旧的 tag,cat 即表示原样输出;
--prune-empty 删除空的(对子目录没有影响的)提交;
--subdirectory-filter 指定子目录路径;
-- --all 该参数必须跟在 -- 后面,表示对所有分支进行操作。如果你只想保存当前分支,也可以不添加此参数。
3. 删除 历史提交中的 无用数据
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
4 清理原仓库中 分离的数据
git rm -rf <name-of-folder>
# 提交一下说明对应操作
git commit -m 'Remove some'
# 删除刚才创建的临时分支
# 后一种方法不需要执行这一步
git branch -D <name-of-new-branch>
5. 关联原仓库与新仓库
git commit -m "first commit"
git remote add origin <remote-path>
git push -u origin master
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)