当前位置: 首页 > news >正文

Git Branch介绍(创建分支)(分支是指向某个提交commit的指针)切换分支:git checkout、git switch;重命名分支;git HEAD

文章目录

  • Git Branch 全面指南:从入门到实践
    • 一、什么是 Git Branch?
    • 二、为什么需要分支?
      • 1. 功能开发
      • 2. Bug 修复
      • 3. 实验性开发(试错)
    • 三、常用 git branch 命令
      • 1. 查看分支
      • 2. 创建分支
      • 3. 切换分支
      • 4. 创建并切换(常用)
      • 5. 删除分支
      • 6. 重命名分支
    • 四、分支与 HEAD
    • 五、分支的底层原理
    • 六、分支合并(简单说明)
    • 七、分支最佳实践(非常重要)
      • 1. 分支命名规范
      • 2. 分支生命周期
      • 3. 小步提交 + 快速合并
      • 4. 主分支保护
    • 八、常见误区
      • ❌ 误区 1:分支很重
      • ❌ 误区 2:一个功能一个仓库
      • ❌ 误区 3:不删除分支
    • 九、总结
  • 注:创建分支是基于当前HEAD指针所指向的提交(commit)创建的
    • 创建分支是基于什么创建的?
    • 创建的新分支是空代码吗?
      • 分支的本质
      • 举个例子
      • 验证方法
    • 总结

Git Branch 全面指南:从入门到实践

在日常开发中,分支(branch)是 Git 最核心、最强大的功能之一。无论是多人协作、功能开发,还是版本管理,分支都扮演着关键角色。

本文将从概念、常用命令到实践策略,系统介绍git branch


一、什么是 Git Branch?

在 Git 中,分支本质上是一个指向某个提交(commit)的指针

你可以把它理解为:

分支 = 一条独立的开发时间线

默认情况下,Git 会有一个主分支:

  • main(或旧版本中的master

当你创建新分支时,本质上只是创建了一个新的指针,不会复制代码,因此非常轻量。


二、为什么需要分支?

分支的核心价值是:隔离开发,避免相互影响

常见使用场景:

1. 功能开发

gitbranch feature/login

为新功能单独开分支,开发完成后再合并。

2. Bug 修复

gitbranch fix/payment-error

3. 实验性开发(试错)

gitbranch spike/new-cache-strategy

👉 好处:

  • 不污染主分支
  • 可随时丢弃
  • 多人协作更安全

三、常用 git branch 命令

1. 查看分支

gitbranch

输出示例:

* main feature/login
  • *表示当前所在分支

查看远程分支:

gitbranch-r

查看所有分支:

gitbranch-a

2. 创建分支

gitbranch feature/api

👉 注意:只是创建,不会切换


3. 切换分支

gitcheckout feature/api

或者(推荐新命令):

gitswitch feature/api

4. 创建并切换(常用)

gitcheckout-bfeature/api

或:

gitswitch-cfeature/api

5. 删除分支

删除本地分支:

gitbranch-dfeature/api

强制删除(origin 是默认的远程仓库名称):

gitbranch-Dfeature/api

删除远程分支:

gitpush origin--deletefeature/api

6. 重命名分支

gitbranch-mold-name new-name

四、分支与 HEAD

Git 中有一个重要概念:HEAD

HEAD 指向当前所在分支

例如:

HEAD → feature/login → commit A

当你切换分支时,其实是移动 HEAD:

gitswitch main
HEAD → main → commit B

五、分支的底层原理

Git 分支非常轻量,因为:

  • 分支只是一个指针(pointer)
  • 不复制代码
  • 创建几乎是瞬间完成

结构示意:

A---B---C (main) \ D---E (feature)

这里:

  • main指向 C
  • feature指向 E

六、分支合并(简单说明)

创建分支只是第一步,最终需要合并:

gitmerge feature/api

或者使用 rebase:

gitrebase main

👉 两者区别:

mergerebase
保留历史历史更线性
简单安全更干净但有风险

七、分支最佳实践(非常重要)

1. 分支命名规范

推荐:

  • feature/xxx—— 新功能
  • fix/xxx—— bug 修复
  • hotfix/xxx—— 紧急修复
  • spike/xxx—— 试验

2. 分支生命周期

建议流程:

main └── feature/xxx ↓ merge ↓ 删除

👉 不要长期保留无用分支


3. 小步提交 + 快速合并

避免:

  • 超大分支
  • 长时间不合并

否则会导致:

  • 冲突爆炸
  • review 困难

4. 主分支保护

通常:

  • main禁止直接提交
  • 必须通过 PR / MR 合并

八、常见误区

❌ 误区 1:分支很重

👉 实际上非常轻量


❌ 误区 2:一个功能一个仓库

👉 正确方式:一个仓库 + 多分支


❌ 误区 3:不删除分支

👉 会导致仓库混乱


九、总结

git branch是 Git 最核心的能力之一:

  • 分支 = 指针
  • 成本极低
  • 支持并行开发
  • 是团队协作基础

一句话总结:

不会用分支,就等于不会用 Git


注:创建分支是基于当前HEAD指针所指向的提交(commit)创建的

创建分支是基于什么创建的?

创建分支是基于当前HEAD指针所指向的提交(commit)创建的。

具体来说:

  • 当你执行git branch feature/login时,Git会创建一个新分支指针
  • 这个指针指向的是你当前所在分支的最新提交
  • 例如,如果你在main分支上执行这个命令,新分支就会基于main分支的最新提交创建

创建的新分支是空代码吗?

不是空代码!新分支包含完整的代码,原因如下:

分支的本质

  • Git分支本质上只是一个指向某个提交的指针
  • 创建新分支时,Git只是创建了一个新的指针,并没有复制文件
  • 新分支指向的提交包含了该提交时的所有文件和代码

举个例子

假设当前状态: main: A -- B -- C (HEAD) 执行 git branch feature/login 后: main: A -- B -- C (HEAD) ↑ feature/login: ─┘ 两个分支都指向同一个提交C,包含完全相同的代码

验证方法

你可以通过以下命令验证:

# 查看当前分支的最新提交gitlog--oneline-1# 切换到新分支gitcheckout feature/login# 查看新分支的最新提交(应该和上面一样)gitlog--oneline-1# 查看文件(应该和之前完全一样)ls-la

总结

  • ✅ 新分支基于当前HEAD指向的提交创建
  • ✅ 新分支包含完整的代码(不是空的)
  • ✅ 创建分支非常快速,因为只是创建指针,不复制文件
  • ✅ 只有在新分支上进行新的提交后,两个分支才会开始分叉
http://www.jsqmd.com/news/768426/

相关文章:

  • 告别复制粘贴:深入理解TMS320F28335的GPIO配置与寄存器操作
  • 探索Transformer替代架构:从零构建对话式语言模型的实践指南
  • Joinset卓英社pcb-gasket导电硅橡胶垫片在汽车智能座舱上的应用与发展!
  • 别再死记硬背公式了!用FQJ非平衡电桥实测Cu50和MF51,手把手教你搞定温度传感器标定
  • 爬虫进阶:用 hooks 参数为 requests.get 注入响应钩子,打造更优雅的数据处理流水线
  • Spring Boot 3与Kotlin构建现代博客系统:DDD架构与AI辅助开发实践
  • Zsh-LLM-Suggestions:AI驱动的命令行智能补全插件实战指南
  • ClawHarness:浏览器自动化测试与数据抓取的结构化框架实践
  • 2026春SDU软件创新实训第8周个人工作总结
  • 【2026实测】直击Turnitin算法:英文论文降AIGC过检实操大盘点
  • 从零实现Transformer:深入理解自注意力机制与编码器-解码器架构
  • 别再手动复制链接了!用Java SDK自动化生成拼多多多多进宝推广链接(附完整代码)
  • C++类型转换运算符详解
  • Kubernetes Operator开发脚手架:基于模板快速构建生产级控制器
  • 内容创作团队如何利用Taotoken聚合API提升内容生成效率
  • AIHub:开源AI资源导航与高效利用指南
  • 关于将一台电脑conda虚拟环境打包到另一台电脑的方法
  • 2026海外Turnitin过检SOP:最新英文论文降AI实战盘点(亲测有效)
  • 盼之最新网页算法分析
  • 2026年05月06日最热门的开源项目(Github)
  • 别急着买显卡!手把手教你用旧电脑(GTX 1060 6G)低成本玩转DeepFaceLab换脸
  • 如何处理Data Guard级联备库的日志传输问题_终端备库未收到日志的路由排查
  • AgentSearch框架实战:基于RAG与LLM构建智能搜索智能体
  • 2026年浴室柜公司最新推荐榜/口碑好的浴室柜品牌哪家正规,国内浴室柜公司,推荐浴室柜知名厂商 - 品牌策略师
  • OneCLI实战:构建统一命令行工具,提升DevOps与团队协作效率
  • Excel批量查询工具:告别手动搜索,10倍提升数据处理效率
  • AI智能体业务规则管理:用rulespec告别提示词泥潭
  • 打卡信奥刷题(3219)用C++实现信奥题 P8279 「MCOI-08」Fill In REMATCH
  • ESP32C3的I2S音频开发板DIY全记录:从PCM5102A电路焊接、配置到播放测试音
  • Pearcleaner:macOS上彻底清理应用残留文件的免费开源工具