如何将子目录的Git仓库合并到主项目并保留提交记录?

·
分享 开发工具 Git March 8, 2025

场景还原

我在本地开发一个项目时,先在dataset子文件夹下创建了Git仓库,用于管理数据集相关的代码和版本控制。随着项目扩大,我需要将整个项目(包含dataset子目录)上传到GitHub,但希望保留dataset文件夹的独立提交历史。

问题核心:

如何将一个已存在独立Git仓库的子目录(dataset),合并到主项目的Git仓库中,同时保留其完整的提交记录?


解决方案:使用Git Subtree合并仓库

Git Subtree 允许将一个仓库作为子目录嵌入到另一个仓库,并保留完整历史记录。与Submodule不同,Subtree会将代码完全合并到主仓库,更适合需要频繁修改子目录内容的场景。

操作步骤:

1. 初始化主项目仓库

# 进入项目根目录
cd C:\Users\hollow\YKF2a

# 初始化Git仓库并创建main分支
git init -b main

# 添加文件并提交初始版本
git add .
git commit -m "Initial commit for main project"

2. 使用Subtree添加子仓库

# 语法:git subtree add --prefix=<子目录名> <子仓库路径> <分支名>
git subtree add --prefix=dataset C:\Users\hollow\毕业论文\dataset main

• --prefix=dataset:指定子目录名称为dataset
• 子仓库路径:本地或远程仓库地址(此处为本地绝对路径)
• 分支名:要合并的子仓库分支(此处为main)

3. 验证结果

git log --oneline --graph

# 输出示例
*   cdbed89 (HEAD -> main) Add 'dataset' via subtree
|\  
| * 3a2b1c0 (subproject/main) [dataset] Update data processing
| * 8f7e6d5 [dataset] Initial dataset commit
* 9a8b7c6 Initial commit for main project

此时dataset目录已合并到主项目,且提交历史完整保留。


关键点解析

  1. 为什么不用Submodule?
    Submodule仅保存子仓库的引用,需要用户手动更新。而Subtree将代码直接合并到主仓库,更适合需要共同开发的场景。
  2. 路径处理注意事项
    • 若子仓库位于远程(如GitHub),需替换为远程URL:
    git subtree add --prefix=dataset https://github.com/user/dataset.git main
    • 路径含空格或特殊字符时建议使用双引号包裹。
  3. 后续更新子仓库
    • 拉取子仓库更新:
    git subtree pull --prefix=dataset [URL] main
    • 推送修改到子仓库:
    git subtree push --prefix=dataset [URL] main
  4. 关于 --squash 参数
    若希望合并子仓库的历史提交为单次提交​(避免主仓库历史被污染),可在命令中添加 --squash。
    适用场景:子仓库提交历史复杂,且主仓库只需保留关键版本记录时。

完整操作日志参考

PS C:\Users\hollow\YKF2a> git init -b main
Initialized empty Git repository in C:/Users/94918/Desktop/YKF2a/.git/

PS C:\Users\hollow\YKF2a> git add .
PS C:\Users\hollow\YKF2a> git commit -m "Initial commit for main project"
[main (root-commit) cdbed89] Initial commit for main project
 1 file changed, 47 insertions(+)
 create mode 100644 "\347\273\274\350\277\260\346\241\206\346\236\266.md"

PS C:\Users\hollow\YKF2a> git subtree add --prefix=dataset C:\Users\hollow\毕业论文\dataset main
git fetch C:\Users\hollow\metaProject\dataset main
...
Added dir 'dataset'

最终项目结构

YKF2a(主仓库)
├── 文献综述.md
└── dataset(子仓库合并后的目录)
    ├── data.csv
    └── process.py

优点总结:
• 保留子目录完整开发历史
• 主仓库可独立管理整体项目

  • 趣谈网络协议:通信协议综述
  • Prompt、Agent与MCP概念详解

已有 9 条评论
  1. nhtiznofas

    新项目准备上线,寻找志同道合的合作伙伴

    nhtiznofas October 5th, 2025 at 06:33 am回复
  2. byqjesiaod

    新车首发,新的一年,只带想赚米的人coinsrore.com

    byqjesiaod October 7th, 2025 at 12:25 am回复
  3. dkiqxfpqya

    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com

    dkiqxfpqya October 7th, 2025 at 12:25 am回复
  4. hkhwlraxen

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

    hkhwlraxen October 7th, 2025 at 08:38 pm回复
  5. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    东方明珠客服开户联系方式【182-8836-2750—】?μ- cxs20250806
    东方明珠客服电话联系方式【182-8836-2750—】?- cxs20250806】
    东方明珠开户流程【182-8836-2750—】?薇- cxs20250806】
    东方明珠客服怎么联系【182-8836-2750—】?薇- cxs20250806】

    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099 November 10th, 2025 at 03:53 pm回复
  6. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    华纳圣淘沙开户步骤详解(183-8890-9465—?薇-STS5099【6011643】

    华纳圣淘沙公司开户流程全解析(183-8890-9465—?薇-STS5099【6011643】
    华纳圣淘沙公司账户注册指南(183-8890-9465—?薇-STS5099【6011643】
    新手如何开通华纳圣淘沙公司账户(183-8890-9465—?薇-STS5099【6011643】
    华纳圣淘沙企业开户标准流程(183-8890-9465—?薇-STS5099【6011643】
    华纳圣淘沙公司开户:从零到一(183-8890-9465—?薇-STS5099【6011643】
    官方指南:华纳圣淘沙公司开户流程(183-8890-9465—?薇-STS5099【6011643】
    华纳圣淘沙公司开户流程说明书(183-8890-9465—?薇-STS5099【6011643】

    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099 November 17th, 2025 at 03:57 pm回复
  7. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    华纳圣淘沙公司开户新手教程

    零基础学会(183-8890-9465薇-STS5099)
    华纳圣淘沙公司开户

    华纳圣淘沙公司开户保姆级教程(183-8890-9465薇-STS5099)

    一步步教你开通华纳圣淘沙公司账户(183-8890-9465薇-STS5099)

    华纳圣淘沙公司开户分步图解

    首次开户必看:(183-8890-9465薇-STS5099)
    华纳圣淘沙全攻略

    华纳圣淘沙公司开户实操手册(183-8890-9465薇-STS5099)
    华纳圣淘沙开户流程视频教程

    手把手教学:(183-8890-9465薇-STS5099)
    华纳圣淘沙公司开户

    华纳圣淘沙公司开户完全指南(183-8890-9465薇-STS5099)

    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099 November 20th, 2025 at 05:16 pm回复
  8. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    寻找华纳圣淘沙公司开户代理(183-8890-9465薇-STS5099】

    华纳圣淘沙官方合作开户渠道(183-8890-9465薇-STS5099】

    华纳圣淘沙公司开户代理服务(183-8890-9465薇-STS5099】

    华纳圣淘沙公司开户咨询热线(183-8890-9465薇-STS5099】

    联系客服了解华纳圣淘沙开户

    (183-8890-9465薇-STS5099】
    华纳圣淘沙公司开户专属顾问

    (183-8890-9465薇-STS5099】

    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099 November 21st, 2025 at 04:48 pm回复
  9. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    《华纳圣淘沙公司开户流程全解析》→ 官方顾问一对一指导??? 安全联系:183第三段8890第四段9465
    《华纳圣淘沙开户步骤详解》→ 」专属通道快速办理??? 安全联系:183第三段8890第四段9465
    《华纳圣淘沙账户注册指南》→ 扫码获取完整资料清单?「微?? 安全联系:183第三段8890第四段9465
    《新手开通华纳圣淘沙公司账户指南》→ 限时免费咨询开放??? 安全联系:183第三段8890第四段9465
    《华纳圣淘沙企业开户标准流程》→ 资深顾问实时解答疑问??? 安全联系:183第三段8890第四段9465
    《华纳圣淘沙开户步骤全景图》→ 点击获取极速开户方案??? 安全联系:183第三段8890第四段9465
    《华纳圣淘沙账户创建全流程手册》→ 预约顾问免排队服务?9?? 安全联系:183第三段8890第四段9465 《从零开通华纳圣淘沙公司账户》→ 添加客服领取开户工具包?? 安全联系:183第三段8890第四段9465
    《官方授权:华纳圣淘沙开户流程》→ 认证顾问全程代办?」?? 安全联系:183第三段8890第四段9465
    《华纳圣淘沙开户说明书》→立即联系获取电子版文件??? 安全联系:183第三段8890第四段9465

    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099 November 22nd, 2025 at 04:56 pm回复
取消回复

说点什么?
Title
操作步骤:

© 2025 HollowのBlog. Using Typecho & Moricolor.