当前位置: 首页 > article >正文

Git 主库子库管理、分支合并策略

Git 主库子库管理、分支合并策略目录主库与子库的核心概念从零开始创建主库与子库常规开发流程提交与推送撤销操作指南分支与合并更新子库引用分支合并策略dev → test → master总结1. 主库与子库的核心概念主库Superproject总仓库记录子库的地址和所需的具体版本号Commit ID。子库Submodule独立仓库拥有自己的完整历史被主库引用。1.1 目录结构示例my-app/ # 主仓库根目录 ├── .git/ # 主仓库版本库 ├── .gitmodules # 子模块配置文件记录 url 和路径 ├── README.md # 主仓库自己的文件 ├── frontend/ # 子模块1独立仓库 │ ├── .git │ └── src/ └── backend/ # 子模块2独立仓库 ├── .git └── src/1.2 核心原理主库只记录“快照”主库不关心子模块内部文件的具体变化只记录子模块的一个Commit ID。当子模块有更新时主库会显示modified: frontend (new commits)表示子模块已有新版本需要更新主库的指针。1.3 职责分离角色负责不负责子模块开发者进入子模块目录add、commit、push子模块内部代码不修改主库的任何文件不在主库执行add/commit主库管理者在主库执行add 子模块目录更新版本指针然后commit、push不进入子模块内部修改代码不在子模块内执行add/commit/push一句话子模块管代码主库管指针。2. 从零开始创建主库与子库第一步创建主仓库并提交 READMEmkdirmy-appcdmy-appgitinitecho# My ApplicationREADME.mdgitaddREADME.mdgitcommit-mInitial: Add README第二步创建后端子仓库mkdir../backendcd../backendgitinitechoprint(Hello Backend)app.pygitaddapp.pygitcommit-mInitial backend commit第三步创建前端子仓库mkdir../frontendcd../frontendgitinitechoconsole.log(Hello Frontend);index.jsgitaddindex.jsgitcommit-mInitial frontend commit第四步将子模块添加到主仓库cd../my-appgitsubmoduleaddhttps://github.com/your-company/backend.git backendgitsubmoduleaddhttps://github.com/your-company/frontend.git frontendgitstatus# 看到 .gitmodules, backend, frontend 为 new file第五步提交主仓库结构gitadd.gitmodules backend frontendgitcommit-mProject setup: add submodulesgitpush origin main3. 常规开发流程提交与推送黄金规则先推送子模块再提交主模块。# 1. 进入子模块修改并推送cdmy-app/backendgitcheckout maingitpull# ... 编辑代码 ...gitaddapp.pygitcommit-mAdd new APIgitpush origin main# 先推送子模块# 2. 回到主库更新指针并推送cd..gitaddbackend# 记录子模块的新 Commit IDgitcommit-mUpdate backend submodulegitpush origin main可选配置让子模块自动追踪分支避免脱离 HEADgitconfig-f.gitmodules submodule.backend.branch maingitconfig-f.gitmodules submodule.frontend.branch maingitadd.gitmodulesgitcommit-mTrack branches4. 撤销操作指南4.1 只撤销主库的提交保留修改gitreset--softHEAD~1# 提交消失修改回到暂存区4.2 完全回退主库丢弃修改gitreset--hardHEAD~1# 提交和修改全部丢弃4.3 撤销子模块的本地修改cdbackendgitreset--hardHEAD4.4 撤销已推送的提交安全方式# 主库的引用回退产生一次新提交gitrevert HEADgitpush origin main# 子模块内部回退cdbackendgitrevert HEADgitpush origin maincd..gitaddbackend# 因为子模块 Commit ID 变了主库需重新记录gitcommit-mRevert backendgitpush4.5git checkout与git reset的区别命令用途是否移动分支指针是否易恢复git checkout commit临时查看或测试历史版本❌ 不移动进入分离 HEAD 状态✅ 切换回原分支即可恢复git reset --soft commit撤销提交保留修改✅ 移动指针到指定 commit✅ 可重新提交git reset --hard commit彻底丢弃后续提交和修改✅ 移动指针并覆盖工作区❌ 不可逆需用 reflog 找回示例gitcheckout a1b2c3d# 临时查看旧版本# 浏览代码...gitcheckout main# 恢复gitreset--harda1b2c3d# 永久回到旧版本丢弃之后所有提交5. 分支与合并更新子库引用当两个分支指向子模块的不同版本时合并会产生冲突。示例feature分支更新了backend现在合并回main。gitcheckout maingitmerge feature# 若冲突显示# HEAD# -Subproject commit a1b2c3d# # -Subproject commit e4f5g6h# feature# 手动选择最终版本如 e4f5g6hgitaddbackendgitcommitgitpush origin main6. 分支合并策略dev → test → master6.1 两种合并方式对比特性git merge普通合并git merge --squash压缩合并保留源分支历史✅ 保留所有 commit❌ 压缩成一个新 commit目标分支历史合并提交 所有源分支 commit仅一个最终快照提交适用场景需要详细追溯每次修改生产发布只需干净版本6.2 保留历史普通 mergegitcheckouttestgitmerge dev# 保留 dev 的所有提交gitpush origintest6.3 不保留历史squash mergegitcheckouttestgitmerge--squashdev# 只取 dev 最新代码快照gitcommit-mSquash dev into testgitpush origintest6.4 完整流程示例场景dev 有提交 A,B,C合并到 test 后test 上又有 D,E最后需要将 test 合入 master。方式一全程保留历史gitcheckouttestgitmerge dev# 产生 M1gitadd.gitcommit-mDgitadd.gitcommit-mEgitcheckout mastergitmergetest# 产生 M2最终 master 历史包含 A,B,C,M1,D,E,M2。方式二最终只保留一个提交gitcheckouttestgitmerge--squashdevgitcommit-mSquash dev into testgitadd.gitcommit-mDgitadd.gitcommit-mEgitcheckout mastergitmerge--squashtestgitcommit-mRelease v2.0最终 master 只有一个提交包含 dev 最新 D E。6.5 混合策略推荐dev → test普通merge保留历史便于定位 bug。test → mastermerge --squash生产发布只保留整体版本。gitcheckouttestgitmerge dev --no-ffgitpush origintest# test 上多次提交...gitcheckout mastergitmerge--squashtestgitcommit-mRelease v2.0gitpush origin master6.6 注意事项merge --squash不记录源分支关系再次合并可能重复冲突。建议 squash 后删除或重置源分支。多次从 dev 同步到 test 时普通 merge 更安全。7. 总结操作命令特点普通合并git merge dev保留完整历史压缩合并git merge --squash dev只生成一个快照提交撤销本地提交保留修改git reset --soft HEAD~1提交消失修改回到暂存区撤销已推送提交安全git revert HEAD新增反向提交不破坏历史强制回退危险git push --force覆盖远程历史临时查看历史版本git checkout commit分离 HEAD切换分支即恢复永久回退本地分支git reset --hard commit丢弃后续提交不可逆主库更新子模块版本git add 子模块目录commit更新指针核心原则子模块管代码主库管指针。需要完整历史用merge需要干净快照用merge --squash。推荐dev→test保留历史test→master压缩提交。

相关文章:

Git 主库子库管理、分支合并策略

Git 主库子库管理、分支合并策略 目录 主库与子库的核心概念从零开始:创建主库与子库常规开发流程:提交与推送撤销操作指南分支与合并:更新子库引用分支合并策略:dev → test → master总结 1. 主库与子库的核心概念 主库&…...

克隆 ESXi 虚拟机报错 Invalid configuration for device ‘0‘ 完整修复与避坑指南

本文针对 ESXi/vCenter 环境中克隆虚拟机后高频出现的 “Invalid configuration for device 0” 报错,拆解报错的核心根源 —— 克隆后残留的无效虚拟光驱、软驱空设备,提供图形化界面一键修复、命令行应急修复两套完整实操方案,补充批量处理…...

Gemini API 使用教程,接口调用全攻略

在探索AI模型的旅程中,一个高效的起点或许是像库拉KULAAI(t。kulaai,cn)这样的聚合平台,它能帮你快速了解不同模型的特性,而Gemini正是其中备受关注的一员。本文将深入实战,带你一步步掌握Gemin…...

技术日报|免费Claude Code工具连冠再揽4007星总量破万,build-your-own-x逼近50万星上榜

🌟 TrendForge 每日精选 - 发现最具潜力的开源项目 📊 今日共收录 13 个热门项目🌐 智能中文翻译版 - 项目描述已自动翻译,便于理解🏆 今日最热项目 Top 10 🥇 Alishahryar1/free-claude-code 项目简介: 在…...

从Python小白到全栈:聊聊PyCharm专业版里那些社区版没有的‘生产力神器’

从Python小白到全栈:聊聊PyCharm专业版里那些社区版没有的‘生产力神器’ 第一次用PyCharm社区版调试Django项目时,我在控制台输出了整整三页的SQL查询日志——这些本该在Database Tools面板里直观展示的关系数据,最终以密密麻麻的文本形式淹…...

Java 面试参考指南 V3.0 版(完美契合当下所有互联网公司面试需求)

这份文档由阿里巴巴架构师牵头,联合了部门上上下下 P6 - P8 级岗位众人的意见,1.0 版本由此诞生。(这阵容,质量就不用我多说了吧)内容非常全面,主要是结合了互联网大厂的面试需求点,包含了&…...

FPGA设计效率翻倍:巧用LUT6与进位链(CARRY4)实现超快加法器(Vivado实例)

FPGA设计效率翻倍:巧用LUT6与进位链(CARRY4)实现超快加法器(Vivado实例) 在FPGA开发中,加法器是最基础却又最关键的运算单元之一。传统上,我们习惯直接使用""运算符让综合工具自动处理,但这种做法…...

SDMatte交互式图像抠图:无需专业技巧,快速实现精准对象分离

SDMatte交互式图像抠图:无需专业技巧,快速实现精准对象分离 1. 为什么你需要SDMatte? 想象一下这样的场景:你刚拍了一张完美的产品照片,但背景杂乱无章;或者你需要为电商平台快速制作一批透明背景的商品展…...

零代码创建专业图表:Charticulator交互式图表设计工具完全指南

零代码创建专业图表:Charticulator交互式图表设计工具完全指南 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 你是否厌倦了传统图表工具的模板限制&…...

《Java 创建线程有哪些方式?一篇给你讲明白》

正文一、开头先说人话兄弟们,Java 里说“创建线程”,听起来像一件事,实际上像点烧烤套餐:有的是单点有的是叫老板帮你烤有的是点完还能等结果有的是直接包年办会员看起来都能“开个线程”,但姿势不一样,后劲…...

嵌入式开发环境搭建第一步:在VMware中为Ubuntu 22.04.3 LTS做这些关键初始配置

嵌入式开发环境搭建第一步:VMware中Ubuntu 22.04.3 LTS的10项关键配置 当你刚完成Ubuntu 22.04.3 LTS的基础安装,系统就像毛坯房——有基本框架但远未达到"拎包入住"的开发标准。作为嵌入式开发者,我们需要将这个"裸系统&quo…...

Source Han Serif CN终极指南:7大字体样式完全掌握与实战应用

Source Han Serif CN终极指南:7大字体样式完全掌握与实战应用 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版设计寻找既专业又完全免费的高质量字体吗&…...

告别手动填表!用CANdelaStudio 11.0快速制作汽车诊断CDD文件(附DTC/DID导入模板)

告别手动填表!用CANdelaStudio 11.0快速制作汽车诊断CDD文件(附DTC/DID导入模板) 在汽车电子诊断开发领域,CDD文件作为连接诊断需求与测试验证的关键桥梁,其制作效率直接影响项目进度。传统手工录入方式不仅耗时费力&a…...

Chapter 18: System Reset

Chapter 18: System Reset 书籍: PCI Express Technology 3.0 (MindShare Press, 2012) 页码: Book Pages 641-680 | PDF Pages 700-740 学习日期: 2026-04-13本章概要 本章描述 PCIe 的系统复位机制,包括 Hot Reset、Warm Reset、Cold Reset、Fundamental Reset 以…...

给你的Windows 11来一次“数字瘦身“:告别臃肿,重获清爽体验

给你的Windows 11来一次"数字瘦身":告别臃肿,重获清爽体验 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other ch…...

终极Win11优化指南:PowerShell脚本让系统性能飙升40%的秘密

终极Win11优化指南:PowerShell脚本让系统性能飙升40%的秘密 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...

Textractor:重新定义游戏文本提取的智能革命

Textractor:重新定义游戏文本提取的智能革命 【免费下载链接】Textractor Extracts text from video games and visual novels. Highly extensible. 项目地址: https://gitcode.com/gh_mirrors/te/Textractor 在游戏世界中,语言障碍往往成为玩家体…...

如何在Windows上直接运行安卓应用:APK Installer完全指南

如何在Windows上直接运行安卓应用:APK Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行安卓应用,不…...

MPLAB PM3烧录器搭配LabVIEW避坑指南:从驱动安装到‘Operation Succeeded’全流程

MPLAB PM3烧录器与LabVIEW高效联调实战:从零搭建到工业级稳定烧录 1. 硬件连接与驱动配置的隐藏细节 第一次将MPLAB PM3烧录器从包装盒取出时,多数开发者会直接进入软件配置环节,却忽略了物理连接的稳定性往往决定了整个项目的成败。PM3的ICS…...

5分钟快速搭建个人微信机器人:WechatBot终极入门指南

5分钟快速搭建个人微信机器人:WechatBot终极入门指南 【免费下载链接】WechatBot 项目地址: https://gitcode.com/gh_mirrors/wechatb/WechatBot 还在为重复的微信消息回复而烦恼?想要一个24小时在线的智能助手帮你处理日常沟通?Wech…...

华为OLT配置实战:从零开始,手把手教你搞定GPON下挂ONT的完整流程(含DBA模板、线路模板、限速与TR069)

华为OLT配置实战:从零构建GPON网络的完整指南 当你第一次面对华为OLT设备时,那些闪烁的指示灯和复杂的命令行界面可能会让你感到无从下手。但别担心,每个网络专家都曾经历过这个阶段。本文将带你一步步完成从OLT基础配置到ONT上线的全过程&am…...

收藏!小白程序员必看:AI大模型如何赋能电商,开启降本增效新模式?

AI技术正重塑电商行业,从内容生产、运营管理到客户服务,AI全面替代人工,实现降本增效。传统电商模式因高成本、低效率成为瓶颈,而AI以智能算法重构生产力要素,推动电商从“流量争夺”转向“效率竞争”。未来&#xff0…...

高端口腔门诊设计:口腔门诊五感美学设计策略

在口腔门诊中,系统性地运用五感美学,能有效缓解患者焦虑,将冰冷的医疗空间转变为具有治愈力的舒适环境。其核心设计策略如下:1、视觉:舒缓与专业并存 采用米白、浅木等自然柔和色调,避免强烈视觉刺激。利用…...

神经粉尘接口规范

随着脑机接口技术的快速发展,特别是面向医疗康复与神经功能重塑的侵入式应用不断成熟,对底层硬件接口的可靠性、安全性及标准化提出了前所未有的高要求。一种被称为“神经粉尘”的前沿技术概念应运而生,它旨在通过微米乃至纳米尺度的无线传感…...

Azure Kinect Sensor SDK 终极指南:从零开始掌握3D视觉开发

Azure Kinect Sensor SDK 终极指南:从零开始掌握3D视觉开发 【免费下载链接】Azure-Kinect-Sensor-SDK A cross platform (Linux and Windows) user mode SDK to read data from your Azure Kinect device. 项目地址: https://gitcode.com/gh_mirrors/az/Azure-Ki…...

意识盗版防御协议:软件测试从业者的专业防线与合规实践

在软件生命周期中,测试环节不仅是质量与安全的守门人,更是知识产权保护与合规性验证的关键节点。对于软件测试从业者而言,盗版软件的潜在威胁远超功能缺陷,它可能以“绿色版”、“破解补丁”或“非官方镜像”的形式,悄…...

终极实战指南:如何用Win11Debloat专业优化Windows系统,告别臃肿与隐私泄露

终极实战指南:如何用Win11Debloat专业优化Windows系统,告别臃肿与隐私泄露 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various oth…...

GraphViz DOT语法进阶:从基础语法到绘制UML类图和时序图实战

GraphViz DOT语法进阶:从基础语法到绘制UML类图和时序图实战 在软件工程领域,可视化工具的重要性不言而喻。GraphViz作为一款开源的图形可视化工具,凭借其简洁的DOT语法和强大的布局能力,成为开发者绘制各类技术图表的首选。不同于…...

3大核心功能:ChanlunX缠论插件让技术分析自动化

3大核心功能:ChanlunX缠论插件让技术分析自动化 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX ChanlunX缠论插件是一款专为通达信软件设计的缠论分析工具,通过自动化算法实现缠论…...

debian MEDIATEK Corp. Device 7925 无线网卡驱动安装

总结:升级内核满足版本要求即可。 由于主板自带的wifi7网卡驱动在debian12中2无法安装,需要升级内核才可以使用因此直接将原debian12 升级为debian13 ,此部分参考文章https://zbowling.github.io/mt7925/installation/debian-ubuntu/ 文章最…...