Appearance
分支基础
分支是 Git 最强大的特性之一。Git 的分支极其轻量,创建和切换几乎是瞬时完成的,鼓励开发者频繁使用分支进行实验和功能开发。
什么是分支
分支本质上是指向某个 Commit 的可移动指针。
C1 ← C2 ← C3 ← main(指针,指向 C3)
← feature(另一个指针,也指向 C3)当在某分支上创建新提交时,该分支指针自动移动到最新提交:
C1 ← C2 ← C3 ← C4 ← feature(移动到 C4)
↑
main(仍指向 C3)分支的本质:.git/refs/heads/<branch-name> 文件,内容是一个 SHA-1 哈希值。创建分支仅需写入一个 41 字节的文件,这就是 Git 分支如此轻量的原因。
git branch 查看分支
bash
# 查看本地分支
git branch
# * main ← * 表示当前所在分支
# develop
# feature/login
# 查看远程分支
git branch -r
# origin/main
# origin/develop
# 查看所有分支(本地 + 远程)
git branch -a查看分支详情
bash
# 显示最新提交信息
git branch -v
# * main a1b2c3d feat: 最新功能
# develop e4f5g6h fix: 修复样式
# 显示追踪关系(本地分支对应哪个远程分支)
git branch -vv
# * main a1b2c3d [origin/main] feat: 最新功能
# develop e4f5g6h [origin/develop: ahead 2] fix: 修复样式
# 查看哪些分支已合并到当前分支
git branch --merged
# 查看哪些分支尚未合并到当前分支
git branch --no-mergedgit branch 创建分支
bash
# 在当前提交位置创建新分支
git branch feature/login
# 在指定提交/分支处创建分支
git branch hotfix v1.0.0 # 从 v1.0.0 标签处创建
git branch backup feature/old # 从另一分支创建
git branch debug HEAD~3 # 从 3 个提交前创建注意:
git branch <name>只创建分支,不切换到该分支。
切换分支
git switch(推荐,Git 2.23+)
git switch 是专门用于切换分支的新命令,语义更清晰:
bash
# 切换到已有分支
git switch main
git switch develop
# 创建并切换(等价于 git checkout -b)
git switch -c feature/new-feature
git switch --create feature/new-feature
# 切换到上一个分支(类似 cd -)
git switch -git checkout(传统语法)
git checkout 功能更多,但语义不够清晰(切换分支和还原文件都是它):
bash
# 切换分支
git checkout main
git checkout develop
# 创建并切换
git checkout -b feature/new-feature
# 从指定起点创建并切换
git checkout -b hotfix/bug-123 main创建并切换分支
bash
# 新语法(推荐)
git switch -c feature/user-profile
# 旧语法
git checkout -b feature/user-profile
# 从远程分支创建本地分支
git switch -c feature/login origin/feature/login
git checkout -b feature/login origin/feature/login删除分支
bash
# 删除已合并的分支(安全删除)
git branch -d feature/login
# 强制删除(无论是否合并)
git branch -D feature/experiment
# 删除远程分支
git push origin --delete feature/login
git push origin :feature/login # 旧语法
# 批量删除已合并的分支
git branch --merged main | grep -v "main\|develop\|\*" | xargs git branch -d重命名分支
bash
# 重命名当前分支
git branch -m new-name
# 重命名指定分支
git branch -m old-name new-name
# 重命名后同步到远程
git push origin --delete old-name
git push origin -u new-name分支工作流示例
bash
# 1. 从 main 创建功能分支
git switch main
git pull # 确保 main 是最新的
git switch -c feature/user-auth
# 2. 在功能分支上开发
git add .
git commit -m "feat: 实现用户认证"
# 3. 推送功能分支到远程
git push -u origin feature/user-auth
# 4. 开发完成后,合并到 main
git switch main
git merge feature/user-auth
# 5. 删除功能分支
git branch -d feature/user-auth
git push origin --delete feature/user-auth分支命名规范
良好的分支命名让团队更容易理解每个分支的用途:
功能分支: feature/<描述> feature/user-login
修复分支: fix/<描述> fix/login-crash
热修复: hotfix/<版本>-<描述> hotfix/1.2.1-null-pointer
发布分支: release/<版本> release/1.3.0
文档分支: docs/<描述> docs/update-api-guide
测试分支: test/<描述> test/performance-tuning
重构分支: refactor/<描述> refactor/auth-module分离 HEAD 状态
当 HEAD 不指向分支,而是直接指向某个 Commit 时,处于**分离 HEAD(Detached HEAD)**状态:
bash
# 切换到某个提交(进入分离 HEAD 状态)
git checkout abc123
git switch --detach abc123
# 此时的提示:
# HEAD is now at abc123 feat: ...
# Note: switching to 'abc123'.
# You are in 'detached HEAD' state...在分离 HEAD 状态下的新提交不会属于任何分支,切换分支后这些提交可能"丢失"。
解决方案: 及时创建分支保存这些提交:
bash
# 从当前位置创建分支(在分离 HEAD 时)
git switch -c new-branch
git checkout -b new-branch总结
| 操作 | 命令(推荐) | 命令(传统) |
|---|---|---|
| 查看分支 | git branch | — |
| 创建分支 | git branch <name> | — |
| 切换分支 | git switch <name> | git checkout <name> |
| 创建并切换 | git switch -c <name> | git checkout -b <name> |
| 删除分支 | git branch -d <name> | — |
| 强制删除 | git branch -D <name> | — |
| 重命名分支 | git branch -m <new> | — |
Git 分支的轻量特性鼓励你频繁创建分支,为每个功能、bug 修复、实验都创建独立分支,这是现代 Git 工作流的核心实践。