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 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,以确保远程分支列表是最新的。