git-团队协作基础

🤝 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 fetchgit 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

合并类型

  1. Fast-forward(快进合并):如果目标分支没有新提交,直接移动指针
  2. 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 流程

  1. 在功能分支完成开发
  2. 推送到远程仓库
  3. 在 GitHub/GitLab 创建 Pull Request
  4. 团队成员进行代码审查
  5. 审查通过后合并到主分支

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

实践练习

  1. 完整的协作流程

    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
  2. 处理冲突

    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..branch2git diff branch1 branch2

Q: 合并后如何撤销?

A: 使用 git reset --hard HEAD~1 回退到合并前的状态(谨慎使用)

Q: 可以同时工作于多个分支吗?

A: 可以,但一次只能在一个分支上工作。使用 git stash 可以在分支间切换。


下一步 :学习 团队协作中的注意事项

相关推荐
John Song4 小时前
git多个账号管理
git·github
CV_J4 小时前
解决Git 冲突后本地提交丢失/未推送问题
git
__Witheart__4 小时前
Git 某个分支恢复到某个特定的 commit 状态
git
new_daimond6 小时前
Linux 服务器内存监控与优化指南
linux·服务器·chrome
XU磊2606 小时前
Git 实现github仓库管理-删除指定目录下的所有文件并保留目录结构
git·github
苗壮.7 小时前
「个人 Gitee 仓库」与「企业 Gitee 仓库」同步的几种常见方式
大数据·elasticsearch·gitee
Elastic 中国社区官方博客8 小时前
如何使用 Ollama 在本地设置和运行 GPT-OSS
人工智能·gpt·elasticsearch·搜索引擎·ai·语言模型
zhimingwen8 小时前
解决 GitLab Token 轮换后 SourceTree 认证失败问题
git
昵称是6硬币9 小时前
代码管理——VS Code|Git
git·代码管理