Git 多人协作开发
引言⚠️注意本文不提供基本的 Git 介绍与相关指令的使用教程本文的关注重点在于参考常见的分支模型或者说分支管理策略规范一套自用的分支工作流和分布式工作流用于团队开发场景下的多人协作。参考分支模型Git Flow由 Vincent Driessen 于 2010 年在他的博客文章《A successful Git branching model》中提出。GitHub Flow由 GitHub 于 2011 年左右提出可以参考官方文档或者 Scott Chacon 的文章。GitLab Flow由 GitLab 推荐的分支模型可以参考官方文档。Trunk-Based Development基于主干的开发也叫主干驱动开发由社区维护。本文采用的分支模型为 Git Flow。TipGit 速查表英文版中文版统一远程仓库约定一个统一的远程仓库作为代码共享的基础。团队成员通过此远程仓库同步代码。本文中我们以GitHub 作为统一的远程仓库。分支模型Tip✨ Git 的分支特性使得基于分支的协作开发易如反掌。因此我们规范如下分支模型角色master / main分支只包含完全稳定的代码始终保持可部署状态。此分支禁止直接提交仅通过合并其他分支更新。develop分支开发集成分支通常从这个分支开始工作或测量稳定性此分支包含下一版本的最新开发成果团队成员从这里创建特性分支完成后合并回来。此分支不一定总是稳定的但只要它达到稳定状态就可以合并到master / main中。feature/*分支特性分支用于开发新功能、新特性如feature/user-login。特性分支是一种短期分支从develop分支创建完成后合并回develop随后删掉它。Tip✨ Git 允许并鼓励拥有多个完全独立的本地分支创建、合并和删除这些分支的成本非常低——仅仅只需几秒钟。在 Git 中每天创建、工作、合并和删除分支是司空见惯的。✒️渐进式稳定性分支的 “筒仓” 视图由以上的分支模型角色不难看出稳定分支在提交历史中靠下而最前沿的分支则在历史中靠上它们呈现出一种渐进式的关系。通常更容易将它们视为工作“筒仓”silo当一系列提交经过充分测试后就会“毕业”到更稳定的筒仓中。hotfix/*分支紧急修复分支用于修复生产环境问题如hotfix/bug-login。从master / main分支创建修复后同时合并到master / main和develop随后删掉它。release/*分支发布分支用于版本发布前的测试和准备如release/v1.0。从develop创建测试通过后合并到master / main和develop。项目参与者的分布式工作流✒️NOTE在了解上述分支扮演的角色后是时候尝试以此分支模型进行协作开发了。我们的开发模型选择为 “共享仓库模型”。我们以一个项目参与者非管理员的视角出发以常见的开发新特性功能为例为项目做出贡献。假设项目管理员已经创建了远程仓库目前远程仓库已有main和develop两个初始分支。整个协作流程看起来是这样的1. 克隆仓库gitclone https://github.com/libgit2/libgit2.git# 使用目标仓库的 url 链接2. 创建特性分支从最新的develop分支创建新特性分支# 切换到本地 develop 分支运行此命令 Git 会自动创建一个跟踪 origin/develop 的 develop 分支gitcheckout develop# 或者使用 git switch develop# 确保本地 develop 分支与远程同步gitpull origin develop# 创建并切换到特性分支gitcheckout-bfeature/*# 或者使用 git switch -c feature/*Tip有关于远程跟踪分支、跟踪分支、本地分支之间的联系可以参考 Git 分支-远程分支。一句话概括就是远程跟踪分支是远程分支的本地镜像跟踪分支是关联了该镜像的本地分支本地分支是未关联任何镜像的普通本地分支。如下是一些可能常用的分支查看命令命令介绍备注git branch列出所有本地分支- 当前分支会显示*号git branch -a列出所有分支包括远程- 显示本地 远程分支- 远程分支会以remotes/开头git branch -r查看远程分支- 只列出远程跟踪分支git branch -v查看分支详情最后提交- 显示每个分支的最后一次提交信息git branch -vv显示详细的分支跟踪信息- 显示上游分支跟踪分支的信息3. 本地开发与提交开发过程中频繁提交代码# 查看修改gitstatusgitdiff# 添加修改到暂存区gitadd文件名# 或者使用 git add . 添加所有修改# 提交包含清晰的提交信息gitcommit-mfeat: 实现用户登录接口的权限绑定Tip小步迭代便于回溯提交信息需遵循规范要求例如feat: 新增 xxx 功能新功能fix: 修复 xxx bugbug 修复docs: 更新 API 文档文档修改4. 同步远程更新本地特性分支开发过程中其他成员可能已向远程仓库的develop分支推送了新的提交。因此需定期同步远程更新到本地避免冲突# 切换到本地 develop 分支gitcheckout develop# 或者使用 git switch develop# 确保本地 develop 分支与远程同步gitpull origin develop# 切换到本地特性分支gitcheckout feature/*# 或者使用 git switch feature/*# 合并 develop 的更新或者使用✨变基命令保持提交记录整洁gitmerge develop# 或者使用 git rebase develop5. 推送分支到远程完成开发后将本地特性分支推送到远程仓库与团队成员共享gitpush-uorigin feature/*# -u 选项用于指定跟踪关系6. 代码审查PR/MR通过远程仓库平台创建PullRequestGitHub或MergeRequestGitLab请求将feature/*合并到develop由负责人进行代码审查检查代码风格、逻辑正确性、测试覆盖等。审查过程中若需修改直接在本地特性分支修改并推送PR 会自动更新。7. 合并代码并清理审查通过后将feature/*合并到develop可通过远程仓库平台合并或用命令行。合并后删除远程和本地特性分支避免冗余# 删除远程仓库的分支gitpush origin--deletefeature/*# 或者直接在远程仓库平台删除# 切换到本地 develop 分支gitcheckout develop# 或者使用 git switch develop# 删除跟踪分支gitbranch-dfeature/*# 删除远程跟踪分支gitbranch-rdorigin/feature/*# 或者使用 git fetch -p# 同步合并后的最新代码gitpull origin develop8. That’s all最佳实践保护核心分支在远程仓库设置分支保护规则如main、develop禁止直接推送必须通过 PR 并经审查后合并。基于特性的工作流为正在开发的每个新特性创建新分支以便无缝地在它们之间来回切换然后当该特性合并到主线时删除每个分支。频繁同步每天至少同步一次远程develop分支到本地减少冲突概率。小步提交每个提交只包含一个逻辑修改如一个功能点、一个 bug 修复便于回溯和撤销。忽略无关文件通过.gitignore文件排除临时文件、依赖包如node_modules/、IDE 配置等避免提交冗余内容。GitHub 在 “github/gitignore” 公共存储库中维护建议用于许多常用操作系统、环境及语言的.gitignore文件的正式列表。还可以使用 gitignore.io 创建.gitignore文件以用于操作系统、编程语言或 IDE。有关详细信息请参阅 github/gitignore 和 gitignore.io 站点。使用标签版本管理发布版本时在main分支创建标签如v1.0.0便于追溯历史版本gittag-av1.0.0-m发布v1.0.0版本gitpush origin v1.0.0结合 CI/CD通过 GitHub Actions、GitLab CI 等工具在 PR 阶段自动运行测试、代码检查确保合并质量。…参考[1]《Pro Git》[2]拉取请求文档 - GitHub 文档下一篇

相关新闻

大模型RLHF中PPO训练实战:核心原理、调优技巧与避坑指南

大模型RLHF中PPO训练实战:核心原理、调优技巧与避坑指南

1. 大模型训练里的PPO到底在解决什么问题很多人第一次接触大模型训练流程,看到SFT(监督微调)之后还有个PPO阶段,第一反应是:前面不是已经教模型怎么回答了吗,为什么还要再折腾一轮强化学习?这个…

2026/9/19 1:30:22 阅读更多 →
通达信抄底高手指标源码解析:信号少成功率高的过滤逻辑

通达信抄底高手指标源码解析:信号少成功率高的过滤逻辑

简介:通达信指标公式源码“抄底高手”是一份面向股票技术分析者与中高级投资者的实操文档,目标是在震荡或下跌行情中捕捉高成功率的抄底买点,并刻意控制信号数量以减少无效提示。文档内含完整公式代码,核心逻辑综合了股价与48日、…

2026/9/19 1:30:22 阅读更多 →
Simulink晶闸管触发电路仿真实战:同步信号与脉冲生成全解析

Simulink晶闸管触发电路仿真实战:同步信号与脉冲生成全解析

简介:基于MATLAB仿真的触发电路资料,面向电气工程及其自动化专业学生、电力电子方向学习者及工程师,系统讲解晶闸管相控电路触发电路的设计原理与Simulink仿真实现。资料从触发信号功率、同步触发、脉冲宽度与前沿陡度、触发区域及移相范围等…

2026/9/19 1:30:22 阅读更多 →

最新新闻

图书资料管理系统如何撑住大型软件架构:分层、检索与高并发实践

图书资料管理系统如何撑住大型软件架构:分层、检索与高并发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:13:44 阅读更多 →
时空图神经网络实战:交通预测中的图建模与模型部署

时空图神经网络实战:交通预测中的图建模与模型部署

简介:一份面向智能交通与时空数据建模的学习资料,系统讲解城市大脑如何结合时空图神经网络,对交通流量、事故和天气数据进行实时监测与未来趋势预测,并探讨如何通过预测干预避免拥堵和事故,适合从事深度学习、机器学习…

2026/9/19 2:13:44 阅读更多 →
从数据链路到智能维护:大型机械装备维护系统实践与MATLAB仿真

从数据链路到智能维护:大型机械装备维护系统实践与MATLAB仿真

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:13:44 阅读更多 →
海康VisionMaster加密狗无法识别?从原理到实操的完整排查指南

海康VisionMaster加密狗无法识别?从原理到实操的完整排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:13:44 阅读更多 →
C# WinForm+SQL Server超市收银系统设计与实现

C# WinForm+SQL Server超市收银系统设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:13:44 阅读更多 →
GitHub Copilot替代方案详解:免费与付费AI编程工具怎么选?

GitHub Copilot替代方案详解:免费与付费AI编程工具怎么选?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 2:12:43 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →