Workflows

多人协作时的同步节奏

围绕多人并行开发,建立一套先 fetch、再观察、再整合的同步节奏,减少 pull 惊喜和共享历史误操作。

适合谁看
  • 要把命令组合成稳定流程的团队成员
  • 需要处理协作顺序和分支边界的人
前置知识
  • 知道 fetch / pull / push / branch 的基本作用
  • 能理解一条分支为什么会分叉
常见风险
  • 照抄流程却没确认当前分支关系
  • 在共享分支上用错整合方式

多人协作里最容易出问题的,往往不是某条命令不会用,而是同步动作太随手。
“先拉再说”在单人仓库里可能只是习惯问题,但在多人并行开发里,往往会把观察、整合、改写历史三件事混在一起。

一条更稳的多人同步流程把获取远端变化、判断差异和真正整合分开,团队才更容易解释每一步为什么发生。
先收集什么
origin/main当前分支状态本地未推送提交
再决定什么
mergerebase暂不整合
关键不是动作快,而是每一步都能解释。

为什么不建议把一切都交给 pull

pull 本身不是错误命令,但它把两类动作绑定到一起了:

  • 获取远端变化
  • 改动当前分支

当团队协作变复杂时,你最需要的是“先看清楚”,而不是“先让当前分支动起来”。

多人协作里,先观察比先整合更重要

如果你不能用一句话解释“当前分支相比上游分支到底多了什么、少了什么”,那就还不适合直接 pull。多人协作时,fetch-first 是一种认知减压手段。

一个团队可执行的同步顺序

git fetch origin
git status
git log --oneline --graph --decorate --all -n 20
git branch -vv

这一轮检查的目标是回答 4 个问题:

  1. 我当前分支和哪个上游分支对应
  2. 本地有没有尚未推送的提交
  3. 远端是不是已经前进了
  4. 双方是 fast-forward 关系,还是已经分叉

只有这几个问题都清楚了,后面的 merge、rebase 或暂缓整合才有意义。

什么时候用 merge,什么时候用 rebase,什么时候先不动

适合 merge 的情况

  • 团队约定共享分支只追加历史
  • 你不想改写已存在的本地提交表达
  • 当前更看重保留真实整合点

适合 rebase 的情况

  • 当前是个人分支或 PR 分支
  • 你想在提交共享前整理历史
  • 团队默认 feature branch 在合并前保持线性

适合先不整合的情况

  • 你还没看清远端变更影响范围
  • 当前工作树里仍有未整理的改动
  • 你正处在上下文切换或事故排查阶段

“先不动”不是拖延,而是避免把还没理解的问题直接带进当前分支。

哪些时刻最该坚持这条节奏

  • 多个人同时改同一模块
  • 当前分支已经累积了本地提交
  • 准备发起或更新 PR 前
  • 刚结束长时间中断,准备重新进入上下文
  • 主分支最近合并频繁,风险上升

这些时刻的共同点是:同步动作一旦带来冲突或意外历史,就会放大认知负担。

一个适合团队长期执行的最小同步协议

可以很简单:

  1. 默认先 fetch
  2. statusbranch -vv 观察当前分支关系
  3. 在共享分支上避免随手 rebase
  4. 在 PR 分支上是否 rebase,遵守团队约定
  5. 同步后如果历史说不清,就停下来重新检查

这个协议的价值不是限制大家,而是让每个人对“同步之后会发生什么”有共同预期。

常见误区

“我一直用 pull,也没出过事”

很多风险不是每次都会触发。它的问题是把观察和修改绑定在一起,让问题一旦出现就更难解释。

“只要我会解决冲突,就不用在意同步节奏”

冲突只是表面代价。真正大的成本是历史变得难解释、回滚变得困难、PR 上下文变得混乱。

“多人协作最重要的是统一命令”

统一命令当然有帮助,但更重要的是统一判断逻辑。
大家都知道什么时候先看、什么时候再动,才是真正降低摩擦。

练习:模拟一次多人协作同步判断

用两个分支模拟远端已经前进、本地也有提交的情境,练习先观察再决定整合方式。

准备
git switch main
git pull --ff-only
git switch -c feature/sync-routine
echo local >> notes.txt
git commit -am "local work"
# 让另一个同事分支或另一份克隆推进 main
步骤
  1. 先执行 `git fetch origin`
  2. 用 `git branch -vv` 看当前分支和上游差异
  3. 用 `git log --oneline --graph --decorate --all -n 20` 看是否分叉
  4. 判断当前更适合 merge、rebase 还是先停手整理工作树
  5. 记录你为什么做这个选择
你应该观察到
  • fetch 不会直接改动当前分支
  • 你能清楚区分本地提交和远端新提交
  • 同步决策会从“习惯动作”变成“有理由的动作”
  • 团队沟通会更容易解释
常见错误
  • fetch 完立刻习惯性 pull
  • 没看 `branch -vv` 就直接整合
  • 明明是共享分支,却按个人分支思路直接 rebase

一个最值得坚持的原则

同步动作要尽量可解释。
如果同步之后你已经解释不清当前历史为什么长这样,那就说明节奏太快、观察太少了。