好的,我把我们的对话整理成你的一份学习笔记,包含:学习过程、你的疑问、对应的解答。
你的 Git 分支与版本管理学习记录
第 1 步:如何为一个新项目开启第一个开发分支?
学习过程
你想知道:在一个 Git 仓库中,准备开始第一个版本的开发,应该怎么做才是最佳实践。
你的疑问(隐含)
- 应该从哪个分支切出来?
- 分支怎么命名?
- 推送到远程要注意什么?
解答
从
main(或master)切出开发分支,如develop或feature/v1-dev。推荐命令:
bashgit checkout main git pull origin main git checkout -b develop git push -u origin develop保护
main,日常开发在develop上,稳定后合并回main并打 tag。
第 2 步:针对 1‑2 人(数学建模练习平台)的分支策略简化
学习过程
你说明项目规模小(1‑2 人,多数单人),是一个对标 LeetCode 的数学建模练习平台,希望得到更贴合实际的分支建议。
你的疑问(隐含)
- 企业级 Git Flow 太重,单人怎么简化?
- 是否还需要
develop、feat、release、hotfix全部保留?
解答
- 推荐 简化版 GitHub Flow:只保留
main+dev+ 短命的feat/xxx。 - 大多数时候直接在
dev上开发,完成里程碑后合并到main并打 tag。 - 给出了三种场景(纯单人、明确迭代、两人协作)的不同做法。
- 强调:tag 比分支更重要,用来记录版本。
第 3 步:明确要使用 4 种分支(feat / release / dev / hotfix),如何管理?
学习过程
你提出希望同时拥有 feat、release、dev、hotfix 四类分支,要求给出完整的管理方案。
你的疑问
- 每个分支的职责是什么?
- 它们之间如何流转?
- 什么时候创建、合并、删除?
解答
- 定义四种分支的用途:
dev:长期存在,日常集散地。feat/*:单个功能开发,完成后合并回dev并删除。release/*:版本发布前的准备(修改版本号、文档、测试),完成后合并到main和dev,然后删除。hotfix/*:紧急修复线上 bug,从main切出,修完后合并到main和dev,然后删除。
- 给出了三个场景的详细命令流(日常功能、版本发布、紧急修复)。
- 强调:
release和hotfix都是临时分支,用完必须删除。
第 4 步:对 release 流程中“合并回 dev 确保版本号变更”产生疑问
学习过程
你仔细阅读了第 3 步中 release 流程的步骤 4(合并回 dev),提出疑问。
你的疑问
- 版本号不是打在 release 分支上吗?
- 将 release 合并到 main 后,tag 会转移到 main 上吗?
- dev 合并 release 后,dev 也会有 tag 的版本号?
- release 分支合并后不会被自动删除吗?
解答
- 澄清版本号 vs tag:
- 版本号是写在文件里(如
package.json中的"version": "1.2.0")。 - tag 是 Git 的标记(如
git tag v1.2.0),附着在某个 commit 上。
- 版本号是写在文件里(如
- tag 不会“转移”:在 release 分支上打 tag,tag 只留在那个 commit 上;合并到 main 后,main 得到相同的代码,但 tag 需要在 main 上重新打。
- dev 获得版本号文件:因为 release 分支修改了版本号文件,合并回 dev 后,dev 也会拥有那个版本号(但 dev 上的 tag 与 main 无关)。
- release 不会自动删除:必须手动执行
git branch -d release/xxx和git push origin --delete release/xxx。 - 给出修正后的正确流程:release 合并到 main → 在 main 上打 tag → 再合并回 dev。
第 5 步:main 分支上一般要进行哪些操作?
学习过程
你想明确 main 分支的职责边界,避免误操作。
你的疑问
- main 上允许做什么?
- 绝对不能做什么?
- 与 dev 的分工是什么?
解答
- 允许的 4 类操作:
- 合并
release/*分支(常规发布) - 合并
hotfix/*分支(紧急修复) - 打 tag(标记版本)
- 只读操作(log、diff、tag 列表)
- 合并
- 禁止的操作:直接 commit、直接 push 新代码、合并 dev 到 main、修改已发布 tag、在 main 上解决冲突、删除 main 分支。
- main 是“成品仓库”,只应通过合并改变内容,永远不直接写代码。
- 给出保护 main 的远程仓库设置建议(禁止直接 push、禁止 force push)。
第 6 步:如何规范地进行版本号管理?
学习过程
你希望有一套完整的版本号管理规范,与你的分支模型配合。
你的疑问
- 版本号格式怎么定?
- 什么情况升 major、minor、patch?
- 版本号存在哪里?
- 如何在 release/hotfix 流程中更新版本号?
- 如何避免 tag 和文件版本号不一致?
解答
- 采用 语义化版本
v{major}.{minor}.{patch}。- major:不兼容的重大变更(如重构架构)。
- minor:新增功能(向下兼容)。
- patch:bug 修复。
- 版本号存储在两个地方:
- 代码文件(
package.json/version.py等) – 程序运行时读取。 - Git tag – 标记发布点。
- 代码文件(
- 核心流程:
- 在
release/v1.2.0分支上修改文件版本号 → 合并到main→ 在main上打相同版本的 tag → 合并回dev。 - 在
hotfix/v1.2.1分支上修改 patch 版本 → 合并到main→ 打 tag → 合并回dev。
- 在
- 原则:
- 版本号只在 release/hotfix 分支上修改。
- 文件版本号必须与 tag 严格一致。
- tag 一旦推送,不可修改(只能打新版本)。
- 提供了可选的自动化脚本(bump-version.sh)和一页纸速查表。
总结:你的学习成果
- 掌握了针对小团队/单人项目的 精简 Git Flow(main + dev + feat + release + hotfix)。
- 理解了每个分支的职责和生命周期。
- 澄清了版本号文件与 Git tag 的区别,以及 release/hotfix 的正确合并顺序。
- 明确了 main 分支上允许和禁止的操作。
- 学会了语义化版本号的规则与实践操作步骤。
现在你可以自信地为自己的数学建模练习平台管理分支和版本了。