适用场景: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 | 随时可上线 | GitHubProtect禁止强推 |
| 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 愉快!