适用场景:3-20 人小型团队,使用 GitHub / Gitee / GitLab 托管代码
示例命令均以 GitHub 为例,GitLab / Gitee 完全通用,只需换远程地址
12.1 协作前准备:一次配置,终身受益
| 配置项 | 命令示例 | 说明 |
|---|---|---|
| 本地身份(仓库级) | git config --local user.name "林冲" git config --local user.email "linchong@team.io" |
多人共用电脑时必设,区分作者 |
| 默认分支名 | git config --global init.defaultBranch main |
新仓库默认 main,跟上 GitHub |
| 换行符自动转换 | git config --global core.autocrlf true |
Windows 推荐 |
| 编辑器 | git config --global core.editor "code --wait" |
冲突解决时自动弹 VS Code |
12.2 单仓库协作:Forking / 共享仓库模式
① 共享仓库模式(团队内部最常用)
-
管理员 创建空仓库,不要初始化 README
https://github.com/team/project.git -
成员一次性克
git clone git@github.com:team/project.git cd project git config --local user.name "林冲" git config --local user.email "linchong@team.io" -
成员日常三板
git pull --rebase origin main # 开始工作前 # ...coding... git add . git commit -m "fix: 修复登录超时" git push origin main--rebase让历史成直线,回滚/查 log 更清爽。
② Fork + PR 模式(跨团队 / 开源项目)
-
成员 Fork 官方仓库 → 得到
github.com/自己/project -
本地关联两远
git clone git@github.com:自己/project.git cd project git remote add upstream https://github.com/官方/project.git -
功能开
git checkout -b feature/pay # ...coding... git push -u origin feature/pay -
浏览器创建 Pull Request(PR) → 官方评审 → 合并
-
同步官方最新代
git fetch upstream git checkout main git merge upstream/main git push origin main
12.3 分支策略:Git-Flow 简化版
| 分支 | 命名 | 用途 | 保护规则 |
|---|---|---|---|
| main | main |
随时可上线 | GitHub Protect 禁止强推 |
| develop | develop |
日常集成 | 同 main |
| feature | feature/xxx |
新功能 | 任意推送,PR 合并 |
| hotfix | hotfix/xxx |
线上紧急修复 | PR 合并后打 Tag |
小团队可把
main当 develop 用,再建release分支即可。
12.4 冲突解决:从上手到上瘾
场景:林冲 & 鲁智深 同时改同一行
-
林冲先 pus
echo "林冲改" >> B.txt git add B.txt && git commit -m "林冲提交" git push -
鲁智深后 push → 被
echo "鲁智深改" >> B.txt git add B.txt && git commit -m "鲁智深提交" git push # 被拒 -
鲁智深拉取最新代码
git pull --rebase origin main此时文件出现冲突标记:
<<<<<<< HEAD 林冲改 ======= 鲁智深改 >>>>>>> 鲁智深提交 -
手工改好(保留想要的内容)→ 保存
-
继续 rebase
git add B.txt git rebase --continue git push -
完事!历史仍是一条直线。
12.5 远程分支生命周期
# 1. 本地新建并推到远程
git checkout -b feature/cart
git push -u origin feature/cart
# 2. 队友同步该分支
git fetch
git checkout -b feature/cart origin/feature/cart
# 3. 功能完成,合并到 main 后删除远程分支
git checkout main
git merge feature/cart
git push origin --delete feature/cart # 远程删
git branch -d feature/cart # 本地删
12.6 大型二进制文件?用 LFS
# 一次性安装
git lfs install
# 追踪大文件
git lfs track "*.zip"
git add .gitattributes
git add demo.zip
git commit -m "添加 200M 压缩包"
git push
把大文件存到 LFS 服务器,仓库里只留指针,clone 飞快。
12.7 常见协作踩坑速查
| 现象 | 原因 | 快速修复 |
|---|---|---|
! [rejected] main -> main (fetch first) |
远端有更新 | git pull --rebase 再 push |
refusing to merge unrelated histories |
两仓库无共同祖先 | git pull --allow-unrelated-histories |
error: You have not concluded your merge (MERGE_HEAD exists) |
上次 merge 没完成 | git merge --abort 重来 |
| 误推大文件 | 历史已污染 | git reflog + git reset --hard <提交> 重写历史 |
12.8 一键备忘清单(建议收藏)
######## 每日开工 ########
git fetch -p # 看远端有没有新分支/被删分支
git checkout main
git pull --rebase origin main
git checkout -b feature/xxx # 新建功能分支
######## 提交阶段 ########
git add .
git commit -m "type: 简短描述"
git push -u origin feature/xxx
######## 合并阶段 ########
# GitHub 网页创建 PR → Code Review → Squash Merge
# 本地清理
git checkout main
git branch -d feature/xxx
git remote prune origin # 清理远端已删分支的本地引用
12.9 小结
-
小团队 → 共享仓库 + 保护
main分支 + PR 合并 -
跨团队/开源 → Fork + PR 模式
-
冲突 不可怕,
pull --rebase+ 手工解决 +push三步搞定 -
分支用完即删,保持仓库轻量
-
大文件交给 LFS,别让仓库臃肿
把这份流程贴在团队 Wiki,新成员 5 分钟即可上手协作。祝 Push & PR 愉快!