🤝 Git 团队协作基础
1. 远程仓库管理
添加远程仓库:git remote add origin
bash
# 添加远程仓库(origin 是默认名称)
git remote add origin https://github.com/username/repo.git
# 查看已配置的远程仓库
git remote -v
# 查看远程仓库详细信息
git remote show origin
# 修改远程仓库地址
git remote set-url origin https://github.com/username/new-repo.git
# 删除远程仓库
git remote remove origin
推送代码:git push
bash
# 首次推送,设置上游分支
git push -u origin main
# 后续推送(已设置上游)
git push
# 推送到指定分支
git push origin feature-branch
# 强制推送(危险!仅在必要时使用)
git push --force
⚠️ 警告 :git push --force 会覆盖远程历史,可能影响其他开发者,谨慎使用!
拉取代码:git pull
bash
# 拉取并合并远程更改
git pull
# 拉取指定分支
git pull origin main
# 拉取但不自动合并
git pull --no-commit
git pull 实际上是 git fetch + git merge 的组合命令。
使用 git fetch 与 git merge 的区别
git pull = git fetch + git merge
推荐工作流 :先 fetch 查看变化,再决定是否 merge
bash
# 1. 先获取远程更新(不自动合并)
git fetch origin
# 2. 查看远程分支的变化
git log origin/main..HEAD # 查看本地有但远程没有的提交
git log HEAD..origin/main # 查看远程有但本地没有的提交
# 3. 查看差异
git diff origin/main
# 4. 确认无误后合并
git merge origin/main
为什么推荐使用 fetch + merge?
- 更安全:可以先查看变化再决定是否合并
- 更灵活:可以选择合并时机
- 更清晰:了解远程仓库的状态
2. 分支管理(Branch)
分支是 Git 的核心功能之一,允许多人同时开发而不互相干扰。
查看分支
bash
# 查看本地分支
git branch
# 查看所有分支(包括远程)
git branch -a
# 查看远程分支
git branch -r
创建与切换分支
bash
# 创建新分支
git branch feature-login
# 创建并切换到新分支
git checkout -b feature-login
# 使用新命令(Git 2.23+)
git switch -c feature-login
# 切换到已存在的分支
git checkout feature-login
# 或
git switch feature-login
# 切换到上一个分支
git checkout -
分支命名规范
推荐命名方式:
feature/功能名称- 新功能分支fix/问题描述- 修复分支hotfix/紧急修复- 紧急修复分支refactor/重构内容- 重构分支docs/文档更新- 文档分支
示例:
bash
git checkout -b feature/user-authentication
git checkout -b fix/login-button-bug
git checkout -b hotfix/payment-error
合并分支:git merge
bash
# 切换到主分支
git checkout main
# 合并功能分支
git merge feature-login
# 合并时保留分支信息
git merge --no-ff feature-login
# 合并时添加提交信息
git merge -m "合并登录功能" feature-login
合并类型:
- Fast-forward(快进合并):如果目标分支没有新提交,直接移动指针
- Three-way merge(三方合并):创建合并提交,保留两个分支的历史
删除分支
bash
# 删除本地分支(已合并)
git branch -d feature-login
# 强制删除本地分支(未合并)
git branch -D feature-login
# 删除远程分支
git push origin --delete feature-login
保护分支
在 GitHub/GitLab 等平台上可以设置分支保护规则:
- 禁止直接推送到主分支
- 要求 Pull Request 审查
- 要求通过 CI/CD 检查
- 禁止强制推送
3. 多人协作的常见流程
Git Flow 工作流
Git Flow 是一种流行的分支管理策略,包含以下分支类型:
main (主分支)
├── 用于生产环境
├── 只接受 release 和 hotfix 的合并
develop (开发分支)
├── 用于日常开发
├── 所有功能分支从这里创建
feature/* (功能分支)
├── 开发新功能
├── 完成后合并回 develop
release/* (发布分支)
├── 准备发布新版本
├── 完成后合并到 main 和 develop
hotfix/* (热修复分支)
├── 紧急修复生产问题
├── 完成后合并到 main 和 develop
Git Flow 工作流示例:
bash
# 1. 从 develop 创建功能分支
git checkout develop
git pull origin develop
git checkout -b feature/new-feature
# 2. 开发功能并提交
git add .
git commit -m "实现新功能"
# 3. 推送到远程
git push -u origin feature/new-feature
# 4. 创建 Pull Request 合并到 develop
# 5. 发布时创建 release 分支
git checkout -b release/1.0.0 develop
# 6. 修复 bug 后合并到 main 和 develop
git checkout main
git merge release/1.0.0
git checkout develop
git merge release/1.0.0
Feature Branch 工作流(简化版)
适合小型团队或简单项目:
bash
# 1. 从 main 创建功能分支
git checkout -b feature/user-login main
# 2. 开发并提交
git add .
git commit -m "实现用户登录功能"
# 3. 推送到远程
git push -u origin feature/user-login
# 4. 创建 Pull Request
# 5. 代码审查通过后合并
git checkout main
git pull origin main
git merge feature/user-login
git push origin main
# 6. 删除功能分支
git branch -d feature/user-login
git push origin --delete feature/user-login
代码评审(Pull Request / Merge Request)
Pull Request 流程:
- 在功能分支完成开发
- 推送到远程仓库
- 在 GitHub/GitLab 创建 Pull Request
- 团队成员进行代码审查
- 审查通过后合并到主分支
Pull Request 最佳实践:
- 写清晰的标题和描述
- 关联相关 Issue
- 添加截图或演示
- 标记需要审查的重点
- 及时回复审查意见
冲突(Conflict)的处理
冲突产生的原因 :
当两个分支修改了同一文件的同一部分时,Git 无法自动合并,需要手动解决。
解决冲突的步骤:
bash
# 1. 尝试合并时出现冲突
git merge feature-branch
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt
# 2. 查看冲突文件
git status
# 3. 打开冲突文件,会看到冲突标记
<<<<<<< HEAD
这是主分支的内容
=======
这是功能分支的内容
>>>>>>> feature-branch
# 4. 手动编辑文件,解决冲突
# 删除冲突标记,保留需要的代码
# 5. 标记冲突已解决
git add file.txt
# 6. 完成合并
git commit
冲突标记说明:
<<<<<<< HEAD- 当前分支的内容=======- 分隔符>>>>>>> feature-branch- 要合并的分支内容
避免冲突的技巧:
- 频繁同步主分支:
git pull origin main - 小步提交,及时推送
- 团队内沟通,避免同时修改同一文件
- 使用
.gitattributes配置合并策略
使用合并工具:
bash
# 配置合并工具
git config --global merge.tool vscode
# 使用工具解决冲突
git mergetool
实践练习
-
完整的协作流程
bash# 克隆项目 git clone https://github.com/team/repo.git cd repo # 创建功能分支 git checkout -b feature/my-feature # 开发并提交 echo "新功能" > feature.txt git add feature.txt git commit -m "添加新功能" # 推送到远程 git push -u origin feature/my-feature # 在平台创建 Pull Request -
处理冲突
bash# 在主分支修改文件 git checkout main echo "主分支修改" >> file.txt git add file.txt git commit -m "主分支修改" # 在功能分支修改同一文件 git checkout feature-branch echo "功能分支修改" >> file.txt git add file.txt git commit -m "功能分支修改" # 尝试合并(会产生冲突) git merge main # 解决冲突后提交
常见问题
Q: 如何查看两个分支的差异?
A: 使用 git diff branch1..branch2 或 git diff branch1 branch2
Q: 合并后如何撤销?
A: 使用 git reset --hard HEAD~1 回退到合并前的状态(谨慎使用)
Q: 可以同时工作于多个分支吗?
A: 可以,但一次只能在一个分支上工作。使用 git stash 可以在分支间切换。
下一步 :学习 团队协作中的注意事项