讲解
分支是 Git 的灵魂。想象你要在项目上尝试一个新功能:直接改主代码风险太大,复制整个项目又笨重。分支给出的方案是:从当前历史岔出一条平行线,在这条线上随便提交,成功了就合并回主线,失败了就整条删掉,主线丝毫不受影响。Git 的分支极其轻量——它只是一个指向某个提交的指针,创建分支就是写下一个 41 字节的文件,所以「早分支、多分支」是 Git 的正确用法。
常用命令:git branch 列出本地分支(当前分支前面有 *);git branch 名字 创建分支(只创建,不切换);git switch 名字 切换到已有分支;git switch -c 名字 创建并切换(等价于老的 git checkout -b);git branch -v 显示各分支指向的最新提交;git branch -d 名字 删除已合并的分支,-D 强制删除未合并的。切换分支时 Git 会把工作区文件还原成目标分支最后一次提交的样子——这就是 ls 时文件「出现又消失」的原因。
理解分支模型的一个关键是 HEAD:它是一个指向「当前所在分支」的指针,提交时当前分支指针前移,HEAD 跟着走。git log --graph --oneline --all 能把这种指针结构画出来,建议每学完一个分支操作都跑一遍,对照图形建立直觉。分支的合并留到下一章,这里先把创建、切换、删除练熟。
示例
git branch
git branch login
git switch login
echo "登录页面" > login.html
git add login.html
git commit -qm "feat: 登录页面骨架"
git switch main
ls
git branch -v
git branch -d feature-demo
git log --oneline --all --graph
在 login 分支上提交的 login.html,切回 main 后就从工作区消失了(它安全地躺在 login 分支的历史里)。git branch -v 能看到 main 和 login 指向不同的提交。
常见坑
- 在错误的分支上提交:写完代码才发现人在 main 上。别慌:先创建新分支(它指向当前提交),再切回 main 把 main 退回去即可,提交不会丢。
- 工作区有未提交改动时切换分支:如果改动与目标分支冲突,Git 会拒绝切换;不冲突时改动会「带过去」,容易造成混淆。切换前要么提交,要么 stash(后面讲)。
- 删除未合并的分支:git branch -d 会拒绝并提示,这是保护机制;确认真的不要了才用 -D 强删。误删也别急,reflog 能找回(最佳实践一章有演示)。
- 分支名随意:约定俗成用斜杠分层,如 feature/login、fix/payment-timeout、hotfix/urgent,配合小写和连字符,一眼看出分支用途。
小结
分支是指向提交的轻量指针,git branch 管理、git switch 切换、-c 创建并切换、-d/-D 删除;HEAD 标记当前位置。下一章学习 switch 的更多形态和 restore 这个「后悔药」。