目录
一、项目背景(团队创建了新的 driver_class 分支)
1.1 为什么会出现一个新的 feature/driver_class?
1.2 driver_class 与 robot_driver 主线的关系
2.3 如果想把 driver_class 合到旧分支,该怎么做?
3.2 driver_class 重构太大,会导致旧分支大量冲突
四、如何基于 driver_class 正确创建自己的开发分支
前言:
在多人协作的大型项目中,Git 分支管理非常关键。
尤其当团队对某个模块进行“大重构”时,你需要 重新理解新的项目基线,并基于最新分支重新创建自己的开发分支。
本文结合我在 robot_driver 项目中的实际操作,总结:
为什么不能继续使用老版本分支?
什么是 driver_class?为什么它现在是最新驱动基线?
如何基于最新 driver_class 正确创建自己的开发分支?
完整的团队级 Git 工作流怎么建立?
看完本章,你就可以完全按照专业流程操作,进行团队级协作!
在之前的章节中已经介绍了很多关于 git 的知识,以下是传送门:
1)关于 git 的基本指令以及分支介绍:
Git 教程(入门+实践)-CSDN博客
https://blog.csdn.net/m0_58954356/article/details/1540745542)VSCode 和 Git 的可视化流程操作指南:
VSCode + Git 全流程可视化操作指南(超详细保姆级)_vscode git-CSDN博客
https://blog.csdn.net/m0_58954356/article/details/1545456163)Git 工作区、暂存区、本地仓库、tracking、origin/dev 概念详解:
Git 最强入门到精通:工作区、暂存区、本地仓库、tracking、origin/dev 全面讲透(图解版)-CSDN博客
https://blog.csdn.net/m0_58954356/article/details/1549418754)Git 中 merge、rebase、fetch、pull、stash 等指令的深层次解析:
一、项目背景(团队创建了新的 driver_class 分支)
1.1 为什么会出现一个新的 feature/driver_class?
在团队的 robot_driver 项目中,你会看到这样的更新提示:
[new branch] feature/driver_class -> origin/feature/driver_class
并在 Gitee 上收到通知:
某某 同事推送了新分支 feature/driver_class
至仓库 xxx有限公司/robot_driver
这说明:
团队正式创建了一个新的 驱动重构分支 driver_class
它是基于项目主线(如 dev)重新开发的重要分支
涉及类结构优化、大量文件重写、协议重构
从 VSCode/Git Graph 也能看到 driver_class 的重构规模:
25 个文件修改
3717 行新增
1774 行删除
提交信息:类结构优化、驱动重构、协议升级等

这意味着:
driver_class = 全新的驱动架构(团队未来的标准版本)
1.2 driver_class 与 robot_driver 主线的关系
你可以理解为:
robot_driver(项目主仓库)
└── feature/driver_class ← 驱动模块最新基线(每个人都必须基于它开发)
并且 driver_class:
基于主线最新代码创建
代表团队重构后的驱动标准结构
是未来所有驱动开发、优化的统一入口
二、fetch 只是“下载信息”,并不会更新当前分支
在团队新增了一个远程分支(例如最新的重构分支)后,你通常会执行:
git fetch origin

但很多人不知道:fetch 并不会让你的本地代码发生变化。
2.1 git fetch 拉下来的到底是什么
执行 git fetch origin 后,你的终端会看到类似:
[new branch] feature/driver_class -> origin/feature/driver_class
含义是:
1)远程仓库新增了一个分支:
feature/driver_class
2)你的本地创建了对应的“远程跟踪分支”:
origin/feature/driver_class
只是把远程最新状态拉到本地,并没有改变你当前的代码。
2.2 fetch ≠ merge,也 ≠ 切换
执行完 fetch 后,你查看分支:
git branch
可能会看到:
* feature/xz
dev
这说明:
你仍在自己的
feature/xz旧分支上并没有自动切换到 driver_class
也没有自动把 driver_class 的内容合并进来
fetch 只是“同步远程信息”,对你当前分支不做任何修改。
这点非常重要,也是很多开发者混淆的地方。
2.3 如果想把 driver_class 合到旧分支,该怎么做?
你当前在 feature/xz,想把 driver_class 的更新合进来:
git merge origin/feature/driver_class
如果你喜欢 rebase(让提交记录更整洁):
git rebase origin/feature/driver_class
但这正是你之前遇到大量冲突的原因(后面章节会解释为什么不能这样做)。
2.4 总结几条 Git 常识
| 命令 | 作用 |
|---|---|
| git fetch | 拉远程最新分支,但不会改本地分支 |
| origin/xxx | 代表“远程分支的本地镜像” |
| git checkout / switch | 切换或创建本地分支 |
| git merge origin/xxx | 把远程分支合到你当前分支 |
2.5 本节总结
git fetch 只“知道了远程有了新分支”,不会自动切到新分支,也不会把新分支合到你当前分支。
必须手动 checkout 或 merge 才会真正改变本地代码。
三、为什么不能继续使用旧分支
当 driver_class 出来后,如果你继续使用旧的 feature/xz(基于原先robot_driver拉的分支),
会遇到非常严重的问题:
3.1 旧分支基于老版本驱动结构
你的旧 feature/xz 是这样创建的:
git checkout -b feature/xz dev / 老版本代码
这意味着:
它的代码结构已经过期
里面的文件与 driver_class 中的新文件不匹配
老逻辑与新框架不兼容
3.2 driver_class 重构太大,会导致旧分支大量冲突
merge 会产生非常典型的错误日志:
1)修改/删除冲突(modify/delete)
文件在 driver_class 中被删除,在旧分支被修改(冲突)
2)内容冲突(both modified)
<<<<<<< HEAD
旧版本代码
=======
新版本代码
>>>>>>> driver_class
3)目录重构导致文件根本不存在
原来 robot_control_node, robot_control_core 被删除或重写
serial_control 逻辑全部重构
action、mpc控制逻辑全部换新架构
这些变化导致:
继续在旧分支开发 = 越写越乱,越合越错,不可维护。
3.3 团队 big refactor 时的标准做法
在大规模重构场景中,每个开发者应该:
1)保留旧分支当备份或直接删除
2)切到最新基线(driver_class)
3)重新 checkout 自己的个人开发分支
这不是 Git 限制,而是:
团队级开发规范
最干净、最专业、最低冲突风险的做法
四、如何基于 driver_class 正确创建自己的开发分支
有两种方式,都正确,但第二种更专业。
4.1 方式一:一步到位(快捷方式)
git checkout -b feature/xz feature/driver_class
含义:
以 driver_class 当前内容为基础
创建新分支 feature/xz
适合:driver_class 已经是最新的情况
4.2 方式二(推荐):确保基线最新 → 再创建新分支
1)切到 driver_class
git switch feature/driver_class
2)同步远程最新代码(重要!)
git pull
git pull = git fetch + merge
即:拉取 origin 的最新更新 → 合并到本地 driver_class
保证你基于的是团队最新版本。
3)从最新 driver_class 创建你自己的分支
git switch -c feature/xz
现在你的 feature/xz:
完全基于最新 driver_class
结构全新、干净
可以放心开发,不会冲突
五、以后如何在新分支上开发和提交自己的代码
5.1 你日常开发都在 feature/xz 上进行
git switch feature/xz
# 写代码
git add .
git commit -m "xxx 修改说明"
✔ 你可以在 feature/xz 上自由提交
✔ 不应该在 driver_class 上提交任何代码
driver_class 只能作为基线使用。
5.2 提交到远程(可选)
git push origin feature/xz
5.3 每次开始开发前,同步团队最新更新
完整流程:
(1)更新 driver_class
git switch feature/driver_class
git pull
(2)切回自己的分支
git switch feature/xz
(3)合并最新基线
git merge feature/driver_class
冲突一般很少(除非你改了 driver_class 的核心逻辑)。
六、完整 Git 工作流总结(可视化流程)
(团队更新)
↓ git pull = git fetch + git merge
┌──────────────────────────────────┐
│ feature/driver_class │
│ (驱动模块最新基线) │
└───────────────┬────────────────┘
checkout -c
↓
┌──────────────────────┐
│ feature/xz │
│(你的开发/学习分支)│
└───────────┬────────┘
↓ 开发提交
git add / git commit
↓ 可选 push
git push origin feature/xz
七、总结
1)driver_class 是现在团队驱动模块的最新基线(必须基于它继续开发)。
2)旧的 feature/xz 基于过时结构,不适合继续使用,合并冲突巨大。
3)正确做法是:删除旧分支 → 切到最新 driver_class → 基于它重建 feature/xz。
浙公网安备 33010602011771号