首页 / Git 入门教程 / 分支概念与创建

Git 入门教程

分支概念与创建

本教程共 26 篇 · 第 9 篇 · 更新于 2026-07-29 · 约 7 分钟阅读

GitGit 入门教程分支git branchgit switchHEAD指针平行宇宙

9. 分支概念与创建

本节目标:理解分支的本质,能创建、查看、切换分支,搞清楚 HEAD 指向谁。

分支是什么

分支就是平行宇宙

你在电脑前学 Git,另一个宇宙的你可能在学 SVN。两个宇宙互不干扰,直到某天合并了——你俩都会了。

在 Git 里,分支让你从主线上分离出来干活。别人看不到你的分支,你也不影响他们。开发完再合并回去。

分支的本质:一个指针

Git 的分支,本质上就是一个指向某个提交的可变指针

每次提交,分支指针自动往前移动。创建新分支,就是新建一个指针。切换分支,就是让 HEAD 指向不同的指针。

因为只是一个 41 字节的文件(40 字符 SHA-1 + 1 个换行符),创建和销毁分支几乎瞬间完成。

Note

SVN 的分支是复制整个目录,大项目要几分钟。Git 的分支是毫秒级。这就是为什么 Git 鼓励频繁用分支。

HEAD 是什么

HEAD 是一个特殊指针,指向当前所在的分支

可以把 HEAD 想象成”你当前在哪个平行宇宙”的标记。

默认情况下,HEAD 指向 main(历史资料多为 master)。

查看分支

git branch

输出:

* main

* 表示当前在 main 分支。

查看所有分支(包括远程):

git branch -a

创建分支

git branch feature

这会在当前提交上创建一个名为 feature 的分支。注意:创建后不会自动切换过去。

想创建并切换,用 git switch(Git 2.23+):

git switch -c feature

旧写法是 git checkout -b featureswitch 语义更清晰,推荐用新的。

切换分支

git switch feature

HEAD 现在指向 feature 分支了。

再切回 main

git switch main
Warning

切换分支会改变工作目录里的文件。如果切到一个旧分支,文件内容会回到那个分支最后一次提交的样子。有未提交的改动时,Git 可能拒绝切换。

分支指针怎么移动

假设当前状态:

main        → commit A
feature     → commit A(刚创建,和 main 指向同一提交)
HEAD        → feature

feature 上提交一次:

git add .
git commit -m "add feature"

现在:

main        → commit A
feature     → commit B(往前移动了)
HEAD        → feature

main 没动,只有 feature 往前走了。

查看分支指向

git log --oneline --decorate 看分支指向:

git log --oneline --decorate --graph --all

输出:

* abc123d (HEAD -> feature) add feature
* def456a (main) initial commit

HEAD -> feature 表示当前在 feature 分支。main 还停在原地。

删除分支

分支合并完了,可以删掉:

git branch -d feature

如果分支还没合并,Git 会拒绝删除。强制删除用 -D

git branch -D feature

重命名分支

git branch -m old-name new-name

重命名当前分支:

git branch -m new-name

分支使用流程

典型的分支工作流:

  1. main 创建新分支:git switch -c feature
  2. 在分支上开发、提交
  3. 开发完成,切回 maingit switch main
  4. 合并分支:git merge feature
  5. 删除分支:git branch -d feature
Tip

分支命名建议用有意义的名称,比如 feature/loginbugfix/header-alignhotfix/security-patch

这章学到了什么

  • 分支本质是指向提交的指针,创建和切换极快
  • HEAD 指向当前所在的分支
  • git branch 查看/创建分支
  • git switch -c 创建并切换分支
  • git switch 切换分支
  • git branch -d 删除分支
  • 分支指针随提交自动移动

下一章,我们学习分支合并和冲突解决。