Git 分支管理

Git 分支管理

掌握Git分支的核心概念、操作命令和最佳实践,实现高效团队协作

开始学习

Git 分支概念

Git 分支是Git最强大的功能之一,它允许你在独立的开发线上工作,而不会影响主代码库。

分支可视化

main
feature/login
feature/payment
hotfix/urgent

什么是分支?

分支是指向提交对象的可变指针。Git的默认分支名称通常是 mainmaster

  • 分支是开发线的抽象
  • 每个分支可以独立开发功能
  • 分支之间可以合并
  • 创建分支非常快速且轻量

分支的优势

使用分支带来的主要好处:

  • 功能隔离:每个功能在独立分支开发
  • 并行开发:团队成员可以同时工作
  • 风险控制:实验性代码不会影响主分支
  • 版本管理:支持多个版本并行维护

提示: Git分支本质上只是指向提交对象的可变指针。Git使用 HEAD 指针来跟踪当前所在的分支。

分支常用命令

查看分支

  • git branch

    列出所有本地分支

  • git branch -a

    列出所有分支(包括远程)

  • git branch -v

    查看分支及其最新提交

  • git branch --merged

    查看已合并到当前分支的分支

创建与切换

  • git branch <name>

    创建新分支

  • git checkout <name>

    切换到指定分支

  • git checkout -b <name>

    创建并切换到新分支

  • git switch <name>

    切换到分支(新命令)

合并与变基

  • git merge <branch>

    合并指定分支到当前分支

  • git rebase <branch>

    将当前分支变基到指定分支

  • git rebase -i <branch>

    交互式变基

  • git cherry-pick <commit>

    选择特定提交应用到当前分支

删除分支

  • git branch -d <name>

    删除已合并的分支

  • git branch -D <name>

    强制删除分支

  • git push origin --delete <name>

    删除远程分支

  • git fetch -p

    清理已删除的远程分支跟踪

最佳实践: 使用描述性的分支名称,如 feature/user-authenticationbugfix/login-errorhotfix/security-patch

分支工作流程

功能分支工作流

每个新功能都在独立分支上开发:

# 1. 从主分支创建功能分支
git checkout -b feature/new-feature main

# 2. 在功能分支上开发并提交
git add .
git commit -m "实现新功能"

# 3. 推送功能分支到远程
git push -u origin feature/new-feature

# 4. 创建Pull Request进行代码审查
# ... 在GitHub/GitLab上操作 ...

# 5. 合并到主分支后删除功能分支
git checkout main
git branch -d feature/new-feature

Gitflow工作流

严格的分支模型,适合有发布周期的项目:

main
develop
feature/A
feature/B
release/1.0
  • main:稳定版本分支
  • develop:开发集成分支
  • feature/*:功能开发分支
  • release/*:版本发布分支
  • hotfix/*:热修复分支

注意: 选择适合团队规模和工作方式的分支策略。小型团队可能更适合功能分支工作流,而大型团队可能需要更严格的Gitflow工作流。

合并与冲突解决

合并类型

快进合并 (Fast-forward)

当目标分支是当前分支的直接上游时,Git只需将指针向前移动。

# 当前分支: feature
# 目标分支: main (在feature之后没有新提交)
git checkout main
git merge feature
三方合并 (Three-way Merge)

当两个分支都有新提交时,Git创建新的合并提交。

# 当前分支: main
# 目标分支: feature (两个分支都有新提交)
git merge feature
# 可能需要解决冲突

解决合并冲突

当同一文件的同一部分在两个分支中都有修改时,会发生合并冲突。

冲突示例:

<<<<<<< HEAD
这是主分支的内容
=======
这是功能分支的内容
>>>>>>> feature-branch
解决步骤:
  1. 使用 git status 查看冲突文件
  2. 手动编辑文件,解决冲突(删除冲突标记)
  3. 使用 git add 标记冲突已解决
  4. 完成合并:git commit
# 1. 查看冲突状态
git status

# 2. 解决冲突后添加文件
git add conflicted-file.txt

# 3. 完成合并
git commit

变基 vs 合并

方面 变基 (Rebase) 合并 (Merge)
历史记录 线性、整洁 保留分支结构
复杂性 可能更复杂 相对简单
适用场景 个人分支、未共享分支 团队协作、共享分支
风险 重写历史,风险较高 安全,不改变历史

重要原则:

  • 不要在公共分支上使用 git rebase
  • 合并前先更新本地分支:git pull --rebase
  • 定期将主分支变更合并到功能分支
  • 保持提交历史的清晰和有意义

警告: 永远不要对已经推送到远程仓库的提交使用变基,这会重写历史并给其他协作者带来问题。

分支命名策略与最佳实践

分支命名约定

使用一致的命名模式:

  • feature/ - 新功能开发
  • bugfix/ - 错误修复
  • hotfix/ - 紧急修复
  • release/ - 版本发布
  • chore/ - 维护任务

示例:feature/user-profile-page

分支保护

保护重要分支:

  • 设置主分支为受保护分支
  • 要求Pull Request和代码审查
  • 要求通过CI/CD流水线
  • 限制直接推送权限

在GitHub/GitLab中配置分支保护规则。

分支生命周期

管理分支的完整生命周期:

  • 及时删除已合并的分支
  • 定期清理陈旧分支
  • 使用标签标记重要发布
  • 文档记录长期支持分支

保持仓库整洁,减少技术债务。

实用工作流示例

# 开始新功能开发
git checkout -b feature/search-function main

# 开发过程中定期提交
git add .
git commit -m "实现搜索基础功能"

# 保持与主分支同步
git fetch origin
git rebase origin/main

# 完成功能后推送到远程
git push -u origin feature/search-function

# 创建Pull Request进行代码审查
# 审查通过后合并到主分支

# 清理本地分支
git checkout main
git pull origin main
git branch -d feature/search-function

团队协作最佳实践

  • 小批量提交:每次提交只解决一个问题
  • 清晰提交信息:说明做了什么以及为什么
  • 定期同步:避免长时间偏离主分支
  • 代码审查:所有更改都应经过同行审查
  • 持续集成:确保每次更改都能通过测试

团队约定: 建立团队内部的分支管理规范,包括命名约定、合并流程、代码审查标准等,确保所有成员遵循相同的实践。