在 Git 中,分支是日常开发里非常重要的概念。无论是开发新功能、修复 Bug、多人协作,还是发布版本,几乎都会用到分支管理。
Git 分支管理常用命令#
| 操作 | 命令 |
|---|---|
| 查看本地分支 | git branch |
| 查看远程分支 | git branch -r |
| 查看所有分支 | git branch -a |
| 创建分支 | git branch 分支名 |
| 创建并切换分支 | git switch -c 分支名 |
| 切换分支 | git switch 分支名 |
| 重命名当前分支 | git branch -m 新分支名 |
| 重命名指定分支 | git branch -m 旧分支名 新分支名 |
| 删除本地已合并分支 | git branch -d 分支名 |
| 强制删除本地分支 | git branch -D 分支名 |
| 删除远程分支 | git push origin --delete 分支名 |
| 查看已合并分支 | git branch --merged |
| 查看未合并分支 | git branch --no-merged |
| 推送本地分支到远程 | git push -u origin 分支名 |
1. 什么是 Git 分支#
Git 分支可以理解为一条独立的开发线。
假设当前项目的主分支是 main,线上代码稳定运行。现在你要开发一个新功能,如果直接在 main 分支上修改代码,可能会影响稳定版本。
更好的做法是创建一个新分支,比如:
# 创建一个名为 feature/login 的新分支
git branch feature/login然后在这个分支上开发登录功能。这样你的修改不会影响 main 分支。等功能开发完成并测试通过后,再把这个分支合并回 main。
简单来说:
main 分支:保存稳定代码
feature 分支:开发新功能
bugfix 分支:修复问题
release 分支:准备发布版本分支的核心作用是:让不同任务可以并行开发,互不干扰。
使用分支可以带来几个明显好处:
- 隔离开发环境
新功能、Bug 修复、实验代码都可以放到独立分支中,不影响主分支。 - 方便多人协作
不同开发者可以在不同分支上工作,最后通过合并代码完成协作。 - 降低发布风险
主分支可以保持稳定,未完成的功能不会直接进入正式版本。 - 方便代码回溯
每个分支都有清晰的开发记录,方便查看某个功能的提交历史。
在实际项目中,分支管理是 Git 工作流的基础。理解分支后,后面的提交、合并、冲突解决、版本发布都会更容易掌握。
2. 查看 Git 分支#
在操作分支之前,首先要知道当前仓库有哪些分支,以及自己正处在哪个分支上。
2.1 查看本地分支#
使用下面的命令可以查看本地所有分支:
git branch示例输出:
dev
* main
feature/login其中带 * 的分支表示当前所在分支。
上面的结果表示当前位于 main 分支,本地还有 dev 和 feature/login 两个分支。
2.2 查看远程分支#
如果想查看远程仓库中的分支,可以使用:
git branch -r示例:
origin/main
origin/dev
origin/feature/login这里的 origin 通常表示远程仓库名称。
2.3 查看本地和远程所有分支#
如果想同时查看本地分支和远程分支,可以使用:
git branch -a示例:
* main
dev
remotes/origin/main
remotes/origin/dev这个命令在多人协作项目中特别常用,因为你可以快速确认本地和远程分别有哪些分支。
2.4 查看当前所在分支#
除了 git branch,也可以使用:
git status示例:
On branch main
nothing to commit, working tree clean这表示当前位于 main 分支,并且工作区是干净的。
3. 创建 Git 分支#
创建分支是 Git 分支管理中最常见的操作之一。
3.1 创建新分支#
使用下面的命令创建一个新分支:
git branch 分支名例如:
git branch feature/login这个命令只会创建分支,不会自动切换到新分支。
创建后可以执行:
git branch查看分支是否创建成功。
3.2 创建并切换到新分支#
实际开发中,更常用的是创建分支后立即切换过去。
推荐使用:
git switch -c 分支名例如:
# 创建新分区feature/login,并切换到feature/login分支
git switch -c feature/login这条命令等价于:
git branch feature/login
git switch feature/login如果你使用的是旧版本 Git,也可以使用:
git checkout -b feature/login不过现在更推荐使用 git switch,因为它的语义更清晰,专门用于切换分支。
3.3 从指定提交创建分支#
有时候你不想从当前分支最新提交创建分支,而是想从某个历史提交创建分支,可以这样写:
git switch -c 分支名 commit-id例如:
git switch -c fix/old-version a1b2c3d这表示从 a1b2c3d 这个提交创建一个新分支。
3.4 创建分支后推送到远程#
本地创建分支后,如果要让其他人也能看到,需要推送到远程仓库:
git push -u origin feature/login其中:
origin:远程仓库名称
feature/login:要推送的分支名
-u:建立本地分支和远程分支的关联建立关联后,以后在这个分支上可以直接使用:
git push或:
git pull不需要每次都写完整远程分支名。
4. 切换 Git 分支#
切换分支表示从当前开发线切换到另一条开发线。
4.1 使用 git switch 切换分支#
# 切换到 dev 分支
git switch dev
# 确认当前分支
git branch4.2 使用 git checkout 切换分支#
旧写法是:
git checkout 分支名git checkout 既可以切换分支,也可以恢复文件,功能比较多,容易让初学者混淆。因此现在更推荐使用 git switch 来切换分支。
4.3 切换分支前要注意什么?#
切换分支前,最好先执行:
git status查看工作区是否有未提交的修改。
如果当前分支有未提交修改,Git 可能会阻止切换分支,避免你的修改被覆盖。
常见处理方式有三种:
第一种,提交当前修改:
git add .
git commit -m "保存当前修改"第二种,临时保存修改:
git stash第三种,确认不需要这些修改后丢弃:
git restore .在真实项目中,不建议在不清楚修改内容的情况下直接丢弃代码。切换分支前先看 git status 是一个很好的习惯。
5. 重命名 Git 分支#
分支名称写错了,或者团队命名规范变化了,可以对分支进行重命名。
5.1 重命名当前分支#
如果你当前就在需要重命名的分支上,可以使用:
git branch -m 新分支名5.2 重命名指定分支#
如果你不在目标分支上,也可以指定旧分支名和新分支名:
git branch -m 旧分支名 新分支名5.3 重命名远程分支#
Git 没有直接“重命名远程分支”的单个命令。通常做法是:
# 先重命名本地分支:
git branch -m old-branch new-branch
# 然后删除远程旧分支:
git push origin --delete old-branch
# 再推送新的分支名:
git push -u origin new-branch如果这个分支已经被多人使用,重命名前最好先和团队确认,避免影响其他人的本地分支。
6. 删除 Git 分支#
当一个功能分支已经合并,或者某个临时分支不再需要时,可以删除它。
6.1 安全删除本地分支#
删除已经合并或不再需要的本地分支:
git branch -d 分支名-d 是安全删除。如果这个分支还没有被合并,Git 会提示错误,防止误删代码。
6.2 强制删除本地分支#
如果确定分支不需要了,即使没有合并,也可以强制删除:
git branch -D 分支名-D 会强制删除分支,使用前要确认分支上的提交不再需要。
6.3 删除远程分支#
删除远程分支使用:
git push origin --delete 分支名删除远程分支后,其他人的本地仓库可能还会看到旧的远程分支引用,可以执行:
git fetch -p清理已经不存在的远程分支引用。
6.4 删除分支前建议先确认是否已合并#
删除分支前,可以先查看它是否已经合并:
git branch --merged如果分支已经合并到当前分支,删除风险较低。
如果没有合并,执行:
git branch --no-merged可以查看尚未合并的分支。
7. 常见分支类型#
好的分支命名可以让团队协作更清晰。看到分支名,就能大致知道这个分支是做什么的。
7.1 实际项目中常见的分支命名包括:#
main:主分支,通常保存稳定代码
dev:开发分支,日常开发集成使用
feature/xxx:新功能分支
bugfix/xxx:Bug 修复分支
hotfix/xxx:线上紧急修复分支
release/xxx:发布准备分支
test/xxx:测试或实验分支7.2 分支命名建议#
推荐遵循以下规则:
使用英文小写 单词之间用短横线连接 使用类型前缀,比如 feature、bugfix、hotfix 名称要能表达分支用途 避免使用无意义名称,比如 test1、abc、new
推荐示例:
feature/user-login
bugfix/cart-price
hotfix/payment-timeout
release/v1.2.0不推荐示例:
test
new
aaa
zhangsan
fix清晰的分支命名能降低沟通成本,尤其适合多人协作项目。
10. Git 分支管理最佳实践#
Git 分支管理不需要复杂,日常开发中记住几个原则即可。
10.1 主分支保持稳定#
main 或 master 分支通常用于保存稳定代码,不建议直接在主分支上开发新功能。
推荐流程:
从 main 创建功能分支
在功能分支开发
测试通过后合并回 main
合并完成后删除无用分支10.2 一个分支只做一件事#
每个分支最好只对应一个功能、一个 Bug 或一次发布任务。
推荐:
feature/login
bugfix/cart-price
hotfix/payment-timeout不推荐:
feature/login-and-payment-and-profile这样可以让代码审查、测试和回滚都更清晰。
10.3 合并后及时清理分支#
功能分支合并后,如果确认不再使用,可以删除本地和远程分支。
# 删除本地分支:
git branch -d feature/login
# 删除远程分支:
git push origin --delete feature/login10.4 删除前先确认是否已合并#
删除分支前建议先查看:
# 查看已合并分支
git branch --merged未合并的分支不要随意强制删除,避免丢失提交。
11. Git 分支管理常见问题#
11.1 Git 创建分支后会自动切换吗?#
不会。
git branch feature/login
# 只创建分支,不会切换分支。
git switch -c feature/login
# 创建并切换分支11.2 git switch 和 git checkout 有什么区别?#
git switch 专门用于切换分支,语义更清晰。
git checkout 功能更多,既能切换分支,也能恢复文件。
初学者更推荐使用 git switch。
11.3 删除分支会删除代码吗?#
如果分支已经合并,删除通常是安全的。
如果分支没有合并,强制删除可能导致提交不容易找回。
删除前建议先执行:
# 查看已合并分支
git branch --merged11.4 远程分支已经删除,本地还显示怎么办?#
执行:
git fetch -p它会清理本地已经失效的远程分支引用。