You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将GIT仓库的子文件夹拆分转换为独立分支?

实现方案

该需求可以实现,以下是可落地的操作步骤,如果你需要保留文件夹的历史提交记录,推荐使用git filter-repo工具操作,无需保留历史可直接用Git原生命令拆分。

前置准备

先克隆原始仓库的本地副本,避免操作失误损坏原仓库数据:

git clone <你的原始Git仓库地址> local-repo
cd local-repo

方案1:无需保留子文件夹历史,快速拆分

步骤1:处理main分支,仅保留根目录文件

git checkout main
# 删除两个子文件夹
git rm -r Folder_A Folder_B
git commit -m "清理main分支,移除Folder_A、Folder_B"

步骤2:创建A分支,仅保留原Folder_A内容

# 创建无历史记录的空分支A
git checkout --orphan A
# 清空工作区和暂存区
git rm -rf .
# 拉取main分支中Folder_A的所有内容
git checkout main -- Folder_A/*
# 将Folder_A内的文件移到分支根目录,删除空文件夹
mv Folder_A/* . && rmdir Folder_A
# 提交初始化内容
git add .
git commit -m "初始化A分支,导入原Folder_A全量内容"

步骤3:创建B分支,仅保留原Folder_B内容

操作逻辑和A分支完全一致:

git checkout --orphan B
git rm -rf .
git checkout main -- Folder_B/*
mv Folder_B/* . && rmdir Folder_B
git add .
git commit -m "初始化B分支,导入原Folder_B全量内容"

方案2:保留子文件夹完整提交历史

优先使用git filter-repo工具实现,操作如下:

  1. 先在本地安装git filter-repo(不同系统对应安装命令不同,可直接搜索对应系统的安装方式)
  2. 拆分A分支并保留历史:
# 重新克隆一份原始仓库
git clone <原始仓库地址> repo-a
cd repo-a
# 过滤仅保留Folder_A的提交历史,且自动将Folder_A内容移到根目录
git filter-repo --subdirectory-filter Folder_A
# 将分支重命名为A
git branch -m main A
  1. 拆分B分支并保留历史:
git clone <原始仓库地址> repo-b
cd repo-b
git filter-repo --subdirectory-filter Folder_B
git branch -m main B
  1. 处理main分支保留根目录文件历史:
git clone <原始仓库地址> repo-main
cd repo-main
# 过滤排除Folder_A和Folder_B的所有内容和历史
git filter-repo --path Folder_A --path Folder_B --invert-paths

拆分完成后,将三个分支分别推送到目标Git仓库即可。

TFVC迁移适配说明

你可以先通过官方迁移工具将TFVC仓库全量导入到Git的main分支,确认结构和历史无误后,再按上述步骤拆分分支即可。

内容的提问来源于stack exchange,提问作者honzajscz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:27:00