Skip to content

分支操作

概述

掌握分支的基本操作是使用 Git 进行日常开发的基础。本节将详细介绍如何创建、切换、删除和管理分支。

git branch 命令

git branch 是管理分支的核心命令,用于创建、列出和删除分支。

创建分支

bash
# 基于当前提交创建新分支
git branch feature-login

# 基于指定提交创建分支
git branch bugfix-123 a1b2c3d

# 基于远程分支创建本地分支
git branch local-feature origin/feature

# 创建分支并跟踪远程分支
git branch --track feature origin/feature

列出分支

bash
# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 列出所有分支(本地和远程)
git branch -a

# 显示分支及其最后一次提交
git branch -v

# 显示分支及其上游分支和领先/落后情况
git branch -vv

输出示例:

  feature-login    a1b2c3d Add login page
* main             b2c3d4e [origin/main] Update README
  hotfix-123       c3d4e5f Fix critical bug

删除分支

bash
# 删除已合并的分支
git branch -d feature-login

# 强制删除分支(即使未合并)
git branch -D feature-login

# 删除远程分支
git push origin --delete feature-login

# 删除已不存在的远程分支的本地引用
git branch -d -r origin/old-feature
git fetch --prune  # 或 git remote prune origin

重命名分支

bash
# 重命名当前分支
git branch -m new-name

# 重命名指定分支
git branch -m old-name new-name

# 强制重命名(覆盖已存在的分支)
git branch -M new-name

git checkout 命令

git checkout 是一个多功能命令,可用于切换分支和恢复文件。

切换分支

bash
# 切换到已存在的分支
git checkout feature-login

# 切换到上一个分支
git checkout -

# 切换到远程分支并创建本地跟踪分支
git checkout -b feature-login origin/feature-login
# 或简写为
git checkout --track origin/feature-login

创建并切换分支

bash
# 创建并立即切换到新分支
git checkout -b feature-login

# 基于指定提交创建并切换
git checkout -b hotfix-123 a1b2c3d

# 基于远程分支创建并切换
git checkout -b feature-login origin/feature-login

# 强制创建(覆盖已存在的分支)
git checkout -B feature-login

切换分支注意事项

bash
# 切换分支前,确保工作区干净
git status

# 如果有未提交的修改,可以:
# 1. 提交修改
git add .
git commit -m "Work in progress"

# 2. 暂存修改
git stash

# 3. 强制切换(会丢失未提交的修改)
git checkout -f feature-login

git switch 命令

Git 2.23+ 引入了 git switch 命令,专门用于切换分支,使命令更加清晰。

基本用法

bash
# 切换到已存在的分支
git switch feature-login

# 切换到上一个分支
git switch -

# 切换到默认分支
git switch main

创建并切换

bash
# 创建新分支并切换
git switch -c feature-login

# 基于指定提交创建并切换
git switch -c hotfix-123 a1b2c3d

# 基于远程分支创建并切换
git switch -c feature-login origin/feature-login

# 强制创建(覆盖已存在的分支)
git switch -C feature-login

分离 HEAD 状态

bash
# 切换到特定提交(分离 HEAD)
git switch --detach a1b2c3d

# 切换到标签
git switch --detach v1.0.0

checkout vs switch

bash
# 旧命令(多功能)
git checkout feature-login     # 切换分支
git checkout -b feature-login  # 创建并切换
git checkout -- file.txt       # 恢复文件

# 新命令(职责分离)
git switch feature-login       # 切换分支
git switch -c feature-login    # 创建并切换
git restore file.txt           # 恢复文件

分支操作工作流

功能开发流程

bash
# 1. 从 main 创建功能分支
git checkout main
git pull origin main
git checkout -b feature-user-auth

# 2. 开发并提交
git add .
git commit -m "Add user authentication"

# 3. 推送到远程
git push -u origin feature-user-auth

# 4. 合并后删除分支
git checkout main
git pull origin main
git branch -d feature-user-auth
git push origin --delete feature-user-auth

热修复流程

bash
# 1. 从生产分支创建热修复分支
git checkout production
git checkout -b hotfix-critical-bug

# 2. 修复并提交
git add .
git commit -m "Fix critical security bug"

# 3. 合并到生产分支和开发分支
git checkout production
git merge hotfix-critical-bug
git checkout develop
git merge hotfix-critical-bug

# 4. 删除热修复分支
git branch -d hotfix-critical-bug

分支管理技巧

查看分支状态

bash
# 查看已合并到当前分支的分支
git branch --merged

# 查看未合并到当前分支的分支
git branch --no-merged

# 查看包含特定提交的分支
git branch --contains a1b2c3d

# 查看不包含特定提交的分支
git branch --no-contains a1b2c3d

批量删除分支

bash
# 删除所有已合并的分支(排除 main 和 develop)
git branch --merged | grep -vE "^\*|main|develop" | xargs git branch -d

# 删除所有以 feature/ 开头的分支
git branch | grep "feature/" | xargs git branch -D

# 删除所有远程已删除的本地分支引用
git fetch --prune

分支描述

bash
# 为分支添加描述
git branch feature-login --edit-description

# 查看分支描述
git config branch.feature-login.description

常见问题

切换分支失败

bash
# 错误:本地修改会被覆盖
error: Your local changes would be overwritten by checkout

# 解决方案 1:暂存修改
git stash
git checkout feature-login
git stash pop

# 解决方案 2:提交修改
git add .
git commit -m "WIP: current work"

# 解决方案 3:放弃修改
git checkout -f feature-login

分支删除失败

bash
# 错误:分支未合并
error: The branch 'feature-login' is not fully merged.

# 确认是否真的要删除
git diff main..feature-login

# 强制删除
git branch -D feature-login

恢复误删分支

bash
# 查看操作历史,找到分支最后的提交
git reflog

# 恢复分支
git branch feature-login a1b2c3d

总结

  • git branch 用于创建、列出和删除分支
  • git checkout 可切换分支,但功能过多
  • git switch 是 Git 2.23+ 推荐的切换分支命令
  • 切换分支前确保工作区干净
  • 定期清理已合并的分支

下一步

学习完分支操作后,建议继续学习: