如果您曾同时开发多个功能,这种情况也许很熟悉:您运行了一个Git 命令,结果突然不确定上周的工作到底在什么分支里了。
随着项目规模扩大,这个问题会更常见。早期,一个代码库可能只有一个 main 分支。但随着时间推移,团队会为新功能、缺陷修复、试验、发布以及紧急热修复创建分支。
这就是为什么在 Git 中列出分支变得至关重要。它能帮助回答一些实际问题:
- 我当前正在什么分支上工作?
- 我的机器上还有哪些分支?
- 远程仓库上存在哪些分支?
本指南将介绍在 Git 中列出分支的基础知识、具体方法,以及如何排查常见问题。
如果您对 Git 还完全陌生,建议先学习我们的 Introduction to Git 课程,先建立信心,再深入分支管理等更细化的话题。
理解 Git 分支
在开始列出分支之前,先来拆解一下什么是 Git 分支。
一个常见的误解是:Git 分支是独立的文件夹或代码库的完整拷贝。但实际上,Git 分支只是指向某个特定提交的轻量级指针。
您可以把它想象为一条并行的时间线,您可以在其中独立地构建功能或做实验,而不会影响稳定的主干代码。这种架构让创建和合并分支变得极其快速高效。

来源:Git
Git 使用一个名为 HEAD 的特殊引用来跟踪您在这些时间线中的当前位置,它始终指向您当前正在工作的分支。由于分支只是指针,切换上下文是瞬时完成的,并不需要搬动大量文件。
想了解更多,请查看我们的 Git 分支 教程,或参阅我们的 Git 速查表。
如何在 Git 中列出本地分支
有了以上概念基础,来看如何列出您仓库中的本地分支。
本地分支是存在于您电脑上的分支。它位于仓库的 .git 文件夹中,表示指向一系列提交的可移动指针。您可以切换到某个本地分支,在其上进行更改并创建新提交。
可以这样理解本地分支:
- 它们属于您这份仓库拷贝
- 当您提交新更改时,它们会向前移动
- 当他人推送代码时,它们不会自动更新
使用 git branch
列出本地分支最常用、最基础的命令非常直观:
git branch技术支持
当您不带任何附加选项运行该命令时,Git 会显示所有本地分支。
关于 git branch 需要记住的重要事项:
- 它只显示本地分支,不显示远程分支
- 它不会访问互联网
- 它不会更改文件、提交或分支历史
由于安全且快速,很多开发者会在开始新工作或切换上下文前,习惯性地运行 git branch。
理解输出
以下是 git branch 可能显示的示例:
bugfix/login-timeout
feature/payment-refactor
* main技术支持
尽管输出很简单,但其中包含几个关键信息。
首先,星号(*)表示当前检出的分支。这是当前工作目录所关联的分支。您创建的任何新提交都会进入该分支。
其次,Git 通常会将当前分支以绿色高亮显示。这只是终端提供的视觉辅助,并不会改变 Git 的行为。
第三,请注意未显示的内容:
这是刻意为之。Git 保持默认输出简洁,便于快速浏览并与其他命令组合使用。
新手提示:如果您的终端在运行 Git 命令后看起来“卡住”了,尝试按 q。Git 常会使用分页器显示长输出,这是一种正常的退出方式。
只获取当前分支
有时没必要列出所有分支。您可能只想知道当前所在的分支。Git 提供了专门命令:
git branch --show-current技术支持
输出仅为分支名:
main技术支持
常见使用场景包括:
- 在推送代码前检查当前分支
- 在脚本中记录分支名
- 在自动化或 CI 流水线中使用分支名
如果 Git 处于分离的 HEAD 状态,该命令将不返回任何内容。虽然起初看起来有些奇怪,但在编写需要检测是否检出到分支的脚本时,这实际上很有用。
常见误解:有些用户在没有显示分支名时会以为 Git “坏了”。多数情况下,这只是意味着您当前不在某个分支上,而是位于某个特定提交。
如何在 Git 中列出远程分支和所有分支
列出远程或所有分支与列出本地分支的方法非常相似。
列出 Git 中的远程分支
像 GitHub 或 GitLab 这样的远程仓库有自己的分支。要查看它们,请添加 -r 标志:
git branch -r技术支持
origin/HEAD -> origin/main
origin/bugfix/login-timeout
origin/feature/payment-refactor
origin/main技术支持
这个示例输出起初可能有些困惑,我们来拆解一下。
您看到的是远程跟踪分支。这些是 Git 用来记录远程仓库最新已知状态的本地引用。
需要理解的要点:
- 这些分支存储在本地
- 只有在您 fetch 时才会更新
- 它们不会自动移动
新手提示:可以把远程跟踪分支看作 Git 的“笔记本”。Git 会写下您上次查看时远程的样子,但除非您明确地 fetch,否则它不会更新这本“笔记本”。
列出 Git 中的所有分支
要同时查看本地分支和远程跟踪分支,请使用 -a 标志:
git branch -a技术支持
* main
feature/payment-refactor
remotes/origin/bugfix/login-timeout
remotes/origin/main技术支持
这种组合视图有助于您理解本地分支与远程分支之间的关系。
需要留意的命名模式:
在决定是否创建跟踪现有远程分支的新本地分支时,这个视图尤其有用。如果您需要克隆一个仓库并在特定分支上工作,请查看我们的指南:如何在 Git 中克隆特定分支。
先 fetch 再说
如果同事推送了一个新分支而您看不到,最常见的原因是您的本地缓存已过期。
解决方法是fetch:
git fetch技术支持
git fetch 会做什么:
- 从远端下载最新的分支信息
- 更新您的远程跟踪分支
- 不改变您的工作文件
该命令在任何时候运行都是安全的。它不会合并代码,也不会覆盖您的工作。很多团队会把 git fetch 当作查看分支前的例行步骤。
常见错误:新手常把 git fetch 和 git pull 混淆。Fetch 只更新分支信息,而 Pull 还会把更改合并到您当前的分支。
如何获取更多分支列表细节
有时仅有分支名还不够。如果您想查看更多信息,可以使用一些有用的标志。
查看最后一次提交
要查看每个分支当前包含的内容,使用:
git branch -v技术支持
输出可能如下:
* main a1b2c3d Fix typo in README
feature/payment-refactor e4f5g6h Refactor payment service技术支持
如您所见,-v 标志会添加重要上下文:
- 简短的提交哈希显示分支当前指向的位置
- 提交消息提示该分支的目的
这是在不切换分支的情况下理解分支用途的最简单方法之一。
新手提示:如果您不确定某个分支是否可以安全删除,查看其最后一次提交消息是一个不错的第一步。关于删除分支的完整指南,请参阅我们的教程:如何删除 Git 分支。
检查上游关联
本地分支通常会跟踪相应的远程分支。要查看这种关系,运行:
git branch -vv技术支持
* main a1b2c3d [origin/main] Fix typo in README
feature/payment-refactor e4f5g6h [origin/feature/payment-refactor] Refactor payment service技术支持
该输出会告诉您:
-
您的本地分支链接到哪个远程分支
-
git pull 将从哪里拉取
-
git push 将推送到哪里
如果某个分支没有上游,它的方括号部分将为空。这往往能解释推送或拉取时报错的原因。
常见错误:在没有上游的分支上尝试运行 git pull 通常会失败。在这种情况下,您需要先设置一个上游分支,或首次推送该分支。
按日期或版本排序分支
要查找最近活跃的分支,可以按提交日期排序:
git branch --sort=-committerdate技术支持
这会将最近更新的分支置顶,较早的分支位于底部。
对于包含版本化分支的仓库,语义排序更有用:
git branch --sort=v:refname技术支持
这会遵循版本号排序,避免令人困惑的字母序。
如何在 Git 中筛选分支列表
如果您在查找特定分支,筛选会非常有用。我将演示如何用几个重要标志来实现。
按名称模式搜索
尤其在大型仓库中,按名称筛选能让您更快找到目标分支。您可以结合 --list 标志和搜索词按名称筛选:
git branch --list 'feature/*'技术支持
请注意 * 作为通配符使用:结果只显示匹配该模式的分支,即以 feature 开头的分支。团队通常使用 feature/、bugfix/ 或 hotfix/ 等前缀来保持有序。可以把它们看作分支的“文件夹”。
查找已合并与未合并的分支
两个非常重要的筛选器是:
git branch --merged
git branch --no-merged技术支持
这些命令会将其他分支与您当前分支进行比较。
安全提醒:在使用 --merged 之前,务必再次确认您位于正确的基准分支(通常是 main 或 develop)。结果取决于您当前所在分支。
查找包含某次提交的分支
如果您知道一个提交哈希并想知道它存在于哪些分支中,使用:
git branch --contains <commit-hash>技术支持
这在追踪缺陷或验证修复是否已被合并时很有用。
例如,当同事告诉您:“我在这个提交哈希里发现了一个 bug;哪些分支会受影响?”您可以使用此命令精准定位 bug 的所在分支。
组合筛选以支持高级流程
我展示的这些筛选器可以组合使用,以进一步缩小结果范围。来看一个示例:
git branch --list 'feature/*' --no-merged技术支持
该命令能快速显示所有未合并的 feature/ 分支,帮助团队保持有序。
排查常见问题
如果遇到问题别担心;最常见的问题都很容易解决。
缺失远程分支
如果您看不到他人已推送的分支,最可能的原因是您忘了 fetch。排查步骤:
-
运行 git fetch
-
然后再次列出分支
如果问题确实是缺少 fetch,这个快速步骤会立刻更新您的本地视图。
分离的 HEAD 状态
有时,git branch 的输出看起来像这样:
* (HEAD detached at a1b2c3d)技术支持
这意味着您不在某个分支上,而是直接查看某个特定提交。
分离的 HEAD 状态本身并不危险,但若您在此状态下产生新提交,除非创建分支,否则之后可能难以找到它们。
要回到正常工作状态,切换到一个已有分支:
git checkout <branch-name>技术支持
现代替代方案:自 Git 2.23+ 起,您可以使用 git switch <branch-name>,这是一条专为切换分支设计的更简洁、更安全的命令。
您也可以使用 -b 标志从当前位置创建新分支:
git checkout -b <new-branch-name>技术支持
删除后分支仍然出现
如果远程分支在服务器上已删除,但本地仍然显示,您可以使用以下命令清理其本地引用:
git remote prune origin技术支持
这会清理陈旧引用,保持仓库整洁。
高手提示: 作为替代方案,您也可以在每次 fetch 时使用 git fetch --prune,这样仓库在更新的同时也完成清理。
结语
在 Git 中列出分支是一项关键技能,能帮助您理解自己的仓库。本文介绍的命令和标志将帮助您避免失误,并与他人更自信地协作。
在启动新项目时,通常值得思考需要怎样的分支结构。想获得一些建议,请参阅这篇关于 Git 分支策略 的指南。
准备好超越基础了吗?前往 Git Fundamentals 技能路径,系统掌握从入门到进阶所需的概念与实操经验。
如果您曾同时开发多个功能,这种情况也许很熟悉:您运行了一个Git 命令,结果突然不确定上周的工作到底在什么分支里了。
随着项目规模扩大,这个问题会更常见。早期,一个代码库可能只有一个
main分支。但随着时间推移,团队会为新功能、缺陷修复、试验、发布以及紧急热修复创建分支。这就是为什么在 Git 中列出分支变得至关重要。它能帮助回答一些实际问题:
本指南将介绍在 Git 中列出分支的基础知识、具体方法,以及如何排查常见问题。
如果您对 Git 还完全陌生,建议先学习我们的 Introduction to Git 课程,先建立信心,再深入分支管理等更细化的话题。
理解 Git 分支
在开始列出分支之前,先来拆解一下什么是 Git 分支。
一个常见的误解是:Git 分支是独立的文件夹或代码库的完整拷贝。但实际上,Git 分支只是指向某个特定提交的轻量级指针。
您可以把它想象为一条并行的时间线,您可以在其中独立地构建功能或做实验,而不会影响稳定的主干代码。这种架构让创建和合并分支变得极其快速高效。
来源:Git
Git 使用一个名为 HEAD 的特殊引用来跟踪您在这些时间线中的当前位置,它始终指向您当前正在工作的分支。由于分支只是指针,切换上下文是瞬时完成的,并不需要搬动大量文件。
想了解更多,请查看我们的 Git 分支 教程,或参阅我们的 Git 速查表。
如何在 Git 中列出本地分支
有了以上概念基础,来看如何列出您仓库中的本地分支。
本地分支是存在于您电脑上的分支。它位于仓库的
.git文件夹中,表示指向一系列提交的可移动指针。您可以切换到某个本地分支,在其上进行更改并创建新提交。可以这样理解本地分支:
使用 git branch
列出本地分支最常用、最基础的命令非常直观:
当您不带任何附加选项运行该命令时,Git 会显示所有本地分支。
关于
git branch需要记住的重要事项:由于安全且快速,很多开发者会在开始新工作或切换上下文前,习惯性地运行
git branch。理解输出
以下是
git branch可能显示的示例:尽管输出很简单,但其中包含几个关键信息。
首先,星号(
*)表示当前检出的分支。这是当前工作目录所关联的分支。您创建的任何新提交都会进入该分支。其次,Git 通常会将当前分支以绿色高亮显示。这只是终端提供的视觉辅助,并不会改变 Git 的行为。
第三,请注意未显示的内容:
这是刻意为之。Git 保持默认输出简洁,便于快速浏览并与其他命令组合使用。
新手提示:如果您的终端在运行 Git 命令后看起来“卡住”了,尝试按
q。Git 常会使用分页器显示长输出,这是一种正常的退出方式。只获取当前分支
有时没必要列出所有分支。您可能只想知道当前所在的分支。Git 提供了专门命令:
输出仅为分支名:
常见使用场景包括:
如果 Git 处于分离的 HEAD 状态,该命令将不返回任何内容。虽然起初看起来有些奇怪,但在编写需要检测是否检出到分支的脚本时,这实际上很有用。
常见误解:有些用户在没有显示分支名时会以为 Git “坏了”。多数情况下,这只是意味着您当前不在某个分支上,而是位于某个特定提交。
如何在 Git 中列出远程分支和所有分支
列出远程或所有分支与列出本地分支的方法非常相似。
列出 Git 中的远程分支
像 GitHub 或 GitLab 这样的远程仓库有自己的分支。要查看它们,请添加
-r标志:这个示例输出起初可能有些困惑,我们来拆解一下。
您看到的是远程跟踪分支。这些是 Git 用来记录远程仓库最新已知状态的本地引用。
需要理解的要点:
新手提示:可以把远程跟踪分支看作 Git 的“笔记本”。Git 会写下您上次查看时远程的样子,但除非您明确地 fetch,否则它不会更新这本“笔记本”。
列出 Git 中的所有分支
要同时查看本地分支和远程跟踪分支,请使用
-a标志:这种组合视图有助于您理解本地分支与远程分支之间的关系。
需要留意的命名模式:
本地分支以
main这样的简单名称出现远程跟踪分支显示为
remotes/origin/下的路径在决定是否创建跟踪现有远程分支的新本地分支时,这个视图尤其有用。如果您需要克隆一个仓库并在特定分支上工作,请查看我们的指南:如何在 Git 中克隆特定分支。
先 fetch 再说
如果同事推送了一个新分支而您看不到,最常见的原因是您的本地缓存已过期。
解决方法是fetch:
git fetch会做什么:该命令在任何时候运行都是安全的。它不会合并代码,也不会覆盖您的工作。很多团队会把
git fetch当作查看分支前的例行步骤。常见错误:新手常把
git fetch和git pull混淆。Fetch 只更新分支信息,而 Pull 还会把更改合并到您当前的分支。如何获取更多分支列表细节
有时仅有分支名还不够。如果您想查看更多信息,可以使用一些有用的标志。
查看最后一次提交
要查看每个分支当前包含的内容,使用:
输出可能如下:
如您所见,
-v标志会添加重要上下文:这是在不切换分支的情况下理解分支用途的最简单方法之一。
新手提示:如果您不确定某个分支是否可以安全删除,查看其最后一次提交消息是一个不错的第一步。关于删除分支的完整指南,请参阅我们的教程:如何删除 Git 分支。
检查上游关联
本地分支通常会跟踪相应的远程分支。要查看这种关系,运行:
该输出会告诉您:
您的本地分支链接到哪个远程分支
git pull将从哪里拉取git push将推送到哪里如果某个分支没有上游,它的方括号部分将为空。这往往能解释推送或拉取时报错的原因。
常见错误:在没有上游的分支上尝试运行
git pull通常会失败。在这种情况下,您需要先设置一个上游分支,或首次推送该分支。按日期或版本排序分支
要查找最近活跃的分支,可以按提交日期排序:
这会将最近更新的分支置顶,较早的分支位于底部。
对于包含版本化分支的仓库,语义排序更有用:
这会遵循版本号排序,避免令人困惑的字母序。
如何在 Git 中筛选分支列表
如果您在查找特定分支,筛选会非常有用。我将演示如何用几个重要标志来实现。
按名称模式搜索
尤其在大型仓库中,按名称筛选能让您更快找到目标分支。您可以结合
--list标志和搜索词按名称筛选:请注意
*作为通配符使用:结果只显示匹配该模式的分支,即以feature开头的分支。团队通常使用feature/、bugfix/或hotfix/等前缀来保持有序。可以把它们看作分支的“文件夹”。查找已合并与未合并的分支
两个非常重要的筛选器是:
这些命令会将其他分支与您当前分支进行比较。
--merged显示其工作已被包含的分支(了解更多 Git 合并)--no-merged显示仍包含独有提交的分支安全提醒:在使用
--merged之前,务必再次确认您位于正确的基准分支(通常是main或develop)。结果取决于您当前所在分支。查找包含某次提交的分支
如果您知道一个提交哈希并想知道它存在于哪些分支中,使用:
这在追踪缺陷或验证修复是否已被合并时很有用。
例如,当同事告诉您:“我在这个提交哈希里发现了一个 bug;哪些分支会受影响?”您可以使用此命令精准定位 bug 的所在分支。
组合筛选以支持高级流程
我展示的这些筛选器可以组合使用,以进一步缩小结果范围。来看一个示例:
该命令能快速显示所有未合并的
feature/分支,帮助团队保持有序。排查常见问题
如果遇到问题别担心;最常见的问题都很容易解决。
缺失远程分支
如果您看不到他人已推送的分支,最可能的原因是您忘了 fetch。排查步骤:
运行
git fetch然后再次列出分支
如果问题确实是缺少 fetch,这个快速步骤会立刻更新您的本地视图。
分离的 HEAD 状态
有时,
git branch的输出看起来像这样:这意味着您不在某个分支上,而是直接查看某个特定提交。
分离的 HEAD 状态本身并不危险,但若您在此状态下产生新提交,除非创建分支,否则之后可能难以找到它们。
要回到正常工作状态,切换到一个已有分支:
现代替代方案:自 Git 2.23+ 起,您可以使用
git switch <branch-name>,这是一条专为切换分支设计的更简洁、更安全的命令。您也可以使用
-b标志从当前位置创建新分支:删除后分支仍然出现
如果远程分支在服务器上已删除,但本地仍然显示,您可以使用以下命令清理其本地引用:
这会清理陈旧引用,保持仓库整洁。
高手提示: 作为替代方案,您也可以在每次 fetch 时使用
git fetch --prune,这样仓库在更新的同时也完成清理。结语
在 Git 中列出分支是一项关键技能,能帮助您理解自己的仓库。本文介绍的命令和标志将帮助您避免失误,并与他人更自信地协作。
在启动新项目时,通常值得思考需要怎样的分支结构。想获得一些建议,请参阅这篇关于 Git 分支策略 的指南。
准备好超越基础了吗?前往 Git Fundamentals 技能路径,系统掌握从入门到进阶所需的概念与实操经验。