Git 分支是指向特定提交的指针。分支允许你在不影响主代码库的情况下,独立开发新功能、修复缺陷或进行实验。工作完成后,可以将分支合并回去。

本指南介绍如何创建和列出本地与远程 Git 分支。

创建 Git 分支

要创建新的本地分支,请使用 git branch 命令,后跟分支名称:

终端
git branch feature-login

该命令会创建分支,但不会切换到该分支。要切换到新分支,请使用 git switch:

终端
git switch feature-login
输出
Switched to branch 'feature-login'

要使用一条命令创建新分支并切换到该分支,请使用 git switch -c:

终端
git switch -c feature-login
输出
Switched to a new branch 'feature-login'

接下来,你可以使用 git add 和 git commit 向新分支添加提交。

信息在较旧的 Git 版本(2.23 之前)中,使用 git checkout -b <name> 来创建并切换到分支。git switch 命令在 Git 2.23 中引入,作为更清晰的替代方案。两者都可以使用,但推荐使用 git switch。

从特定提交创建分支

默认情况下,新分支是从当前 HEAD 创建的。要从特定提交创建分支,请将提交哈希作为第二个参数传入:

终端
git branch bugfix-header a1b2c3d

你也可以从标签创建分支:

终端
git branch release-1.0 v1.0.0

将分支推送到远程

新创建的分支只存在于你的本地仓库中。要将其推送到远程并设置跟踪,请使用带有 -u 标志的 git push。如果你还没有添加远程,则需要先添加。

终端
git push -u origin feature-login

-u 标志会设置上游跟踪,这样以后执行 git push 和 git pull 时无需指定远程和分支名。如果你想更清楚地了解 git pull 在底层做了什么,请阅读我们的 git fetch 与 git pull 指南。

分支已存在

如果同名分支已存在,Git 会输出错误:

输出
fatal: A branch named 'feature-login' already exists.

使用 git branch 列出已有分支,并选择一个不同的名称。

列出 Git 分支

本地分支

要列出所有本地分支,请运行 git branch:

终端
git branch
输出
  dev
  feature-login
  hotfix
* main

当前分支会用星号(*)标出。在此示例中,活动分支是 main。

要查看每个分支上的最后一次提交,请添加 -v 标志:

终端
git branch -v
输出
  dev           a1b2c3d Add user model
  feature-login e4f5a6b Fix login redirect
  hotfix        b7c8d9e Patch memory leak
* main          c0d1e2f Update dependencies

如果要同时查看上游跟踪分支,请使用 -vv:

终端
git branch -vv

远程分支

要仅列出远程跟踪分支,请使用 -r 标志:

终端
git branch -r
输出
  origin/dev
  origin/feature-login
  origin/main

所有分支

要同时列出本地和远程分支,请使用 -a 标志:

终端
git branch -a
输出
  dev
  feature-login
  hotfix
* main
  remotes/origin/dev
  remotes/origin/feature-login
  remotes/origin/main

筛选分支

要按模式筛选分支,请将 --list 标志与通配符一起使用:

终端
git branch --list 'feature*'
输出
  feature-login
  feature-search

这也适用于远程分支:

终端
git branch -r --list 'origin/release*'

故障排除

fatal: not a git repository
请在 Git 项目目录内运行该命令。使用 ls -a 确认,并检查是否存在 .git 目录。

fatal: a branch named '<name>' already exists
使用 git branch 列出已有分支。选择不同的分支名,或使用 git switch <name> 切换到已有分支。

git branch -r 中缺少远程分支
运行 git fetch --all --prune 刷新远程跟踪引用,然后再次列出分支。

快速参考

命令说明
git branch列出本地分支
git branch -a列出本地和远程分支
git branch -r仅列出远程分支
git branch <name>创建新分支
git switch <name>切换到某个分支
git switch -c <name>创建并切换到新分支
git push -u origin <name>将新分支推送到远程

常见问题

git switch 和 git checkout 有什么区别?
git switch 专门用于切换和创建分支。git checkout 也能做同样的事,但它还处理文件恢复,这可能会导致混淆。分支操作请使用 git switch,文件操作请使用 git restore。

如何删除分支?
使用 git branch -d <name> 删除本地分支,或使用 git push origin --delete <name> 删除远程分支。请参阅我们的删除 Git 分支指南。

如何重命名分支?
使用 git branch -m <old-name> <new-name>。请参阅我们的重命名 Git 分支指南。

为什么 git branch 不显示远程分支?
默认情况下,git branch 只列出本地分支。使用 -a 可包含远程跟踪分支,或使用 -r 仅显示远程分支。请先运行 git fetch,以确保远程分支列表是最新的。