git 创建、切换、合并、删除分支完整指南
分支是 Git 最强大的功能。本文用完整示例讲清 git branch、git checkout/switch、git merge、git branch -d 的协作用法,以及分支与 commit 的关系。
分支让你可以在同一条代码上并行开发不同功能互不干扰。理解它只需一句话:分支只是一个「指向某次提交」的可移动指针,创建和切换都极快。
查看当前分支
git branch # 列出本地分支,星号(*)是当前所在
git branch -a # 列出含远程分支
git status # 也会显示当前分支
创建分支
git branch 新功能 # 基于当前所在位置创建
git branch 新功能 某提交 # 基于指定提交创建
切换分支(重点:旧命令 vs 新命令)
git checkout 新功能 # 旧写法(仍通用)
git switch 新功能 # Git 2.23+ 推荐写法,语义更清晰
切换分支时,工作区会被同步成该分支内容;若有未提交改动且与目标冲突,Git 会拒绝切换。
一条命令:创建并切换
git checkout -b 新功能 # 旧
git switch -c 新功能 # Git 2.23+ 推荐
合并分支
功能做完切回主干再合并:
git switch main
git merge 新功能
若两分支没改同一地方,会自动 fast-forward(快进);改了同一处则产生冲突,按冲突解决流程处理。
删除分支
git branch -d 新功能 # 已合并,安全删除
git branch -D 新功能 # 强制删除(即使未合并,慎用,丢代码)
常见报错
error: cannot switch branch while merging:当前有未完成的合并操作,先提交或git merge --abort。error: The branch 'x' is not fully merged:分支未合并就删除,Git 用-d拦截保护;确认丢弃可用-D。
推荐的分支协作模型
main:稳定主干,保持可发布feature/xxx:每个新功能一个分支,完成后合并删掉- 勤合并、分支短小,能显著减少冲突
一句话速记
git branch 建、git switch 切、git merge 合、git branch -d 删。
?
常见问题 FAQ
git checkout 和 git switch 有什么不同?
switch 是 Git 2.23+ 为"切换分支"引入的更清晰命令;checkout 是旧命令,既能切分支也能恢复文件。新项目推荐用 switch 切分支,语义更明确。
切换分支时未提交的改动会丢吗?
不会自动丢,但 Git 可能阻止你切换到与新改动冲突的分支。未提交改动会随你"带到"目标分支(若内容兼容)。建议切换前先 commit 或 stash 保存。
git branch -d 和 -D 区别?
-d 只删除已合并进当前分支的分支,安全;若分支还有未合并提交,-d 会拒绝并提示,需用 -D 强制删除(有丢改动风险)。
误删了分支还能找回吗?
可以。分支本质是指向某提交的指针,可用 git reflog 找到删除前分支指向的提交哈希,再 git branch 分支名 提交哈希 恢复。
为什么我新建分支后看不到新文件?
因为新分支是从当前提交复制出来的,若你切回旧分支,在旧分支上提交的改动就不存在了。分支各自独立,互不影响文件系统。