在多人协作开发场景中,合理地使用 Git 可以有效避免冲突,提升效率,规范协作流程。
本文将从实践角度,结合可视化流程图和命令操作,详尽讲解多人协作下的 Git 工作流。
一、前置知识:Git 中的几个关键概念
1. 分支(Branch)
分支是 Git 中的核心概念,允许你在不影响主线的情况下开发新功能。常见分支有:
main
或master
:主分支,用于生产部署develop
:开发主干,用于集成所有开发功能feature/xxx
:功能分支,用于单人开发一个功能
2. 本地 vs 远程
- 本地仓库:你机器上的 Git 仓库(提交是本地行为)
- 远程仓库:如 GitHub、GitLab、Gitee,多个协作者共享的仓库(push 才会同步)
3. 常见命令回顾
git clone
:克隆远程项目git checkout -b 分支名
:创建并切换新分支git pull
:拉取并合并远程改动git push
:推送本地代码到远程git merge
:将另一个分支合并进当前分支git rebase
:重写历史,慎用于公共分支
关于Merge和Rebase的详细区别,可参见下面这篇文章:
https://juejin.cn/post/7498997224400355347
二、团队协作的标准 Git 工作流(文字版)
假设有三人:你、张三、李四,在一个项目上协作开发,每人负责一个功能。
1. 从远程仓库克隆项目
git clone https://xxx.git
cd project
2. 从 develop
分支拉出自己的功能分支
git checkout develop
git pull origin develop # 保证 develop 是最新的
git checkout -b feature/login # 创建自己的功能分支
张三与李四也分别执行类似命令,创建:
feature/register
feature/profile
3. 各自在 feature 分支上开发,提交并推送
git add .
git commit -m "完成登录功能"
git push origin feature/login
git push origin feature/login
是 将本地的 feature/login 分支的提交推送到远程仓库对应的 feature/login 分支 。也就是推送到自己从主分支拉取出来的 feature/login 开发分支上 。
张三和李四也会 push 自己的 feature 分支。
4. 功能开发完成,合并到 develop 分支(张三先合并)
git checkout develop
git pull origin develop # 拉取最新 develop(很重要)
git merge feature/register # 合并张三的功能分支
git push origin develop
李四也完成开发后:
git checkout develop
git pull origin develop
git merge feature/profile
git push origin develop
你开发完登录功能后:
git checkout develop
git pull origin develop # 必须拉最新,否则可能 push 报错
git merge feature/login
git push origin develop
5. 合并后可删除本地和远程 feature 分支(可选)
git branch -d feature/login
git push origin --delete feature/login
三、流程图演示(可视化理解)
1. 初始阶段
A -- B -- C ← develop
\
\
[你] feature/login
[张三] feature/register
[李四] feature/profile
2. 各自提交(提交到本地 + 推送到远程)
A -- B -- C
|\
| \-- X -- Y ← feature/login(你)
| \-- D -- E ← feature/register(张三)
| \-- P -- Q ← feature/profile(李四)
3. 张三先合并注册功能
A -- B -- C ------------ M1 ← develop
| /
| D--E
|\
| \-- X -- Y ← feature/login
| \-- P -- Q ← feature/profile
4. 李四再合并
A -- B -- C ------------ M1 -------- M2 ← develop
| / /
| D--E P--Q
|\
| \-- X -- Y ← feature/login
5. 最后你合并登录功能
A -- B -- C ------------ M1 -------- M2 -------- M3 ← develop
| / / /
| D--E P--Q X--Y
四、关于 pull 失败和冲突的说明
情况:你开发完后直接 push,Git 提示:
! [rejected] develop -> develop (non-fast-forward)
说明:张三已经先 push 了,你的分支与远程 develop 历史发生分歧,Git 无法自动合并。
正确做法:
git pull origin develop # 拉取远程并合并
# 如果有冲突,解决冲突
# 然后:
git add .
git commit -m "解决冲突"
git push origin develop
🚫 不要直接 git push --force
,会覆盖张三的历史,破坏远程仓库。
五、常见误区及建议
误区 | 描述 | 正确做法 |
---|---|---|
在 develop 上直接开发 | 多人同时提交,容易冲突 | 建立 feature 分支 |
不拉最新代码就合并 | 容易产生冲突、push 被拒绝 | 合并前一定先 pull develop |
用 rebase 合并主分支 | 改写历史,危险 | 对公共分支使用 merge |
直接 push --force | 会覆盖他人改动 | 谨慎,除非团队一致同意 |
六、总结:完整协作流程回顾
git clone
项目git checkout develop && git pull
git checkout -b feature/xxx
- 本地开发,频繁 commit
git push origin feature/xxx
- 完成功能后切 develop,
pull
拉最新,merge
本地分支 git push origin develop
- 功能合并后清理分支(可选)