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

Git 分支指南

什么是 Git 分支?

Git 分支是仓库内的独立开发线,你可以把它想象成一个单独的工作空间,在这里你可以进行修改,而不会影响主分支(或 默认分支)。分支允许开发者在不影响项目实际版本的情况下,开发新功能、修复错误或进行实验。

为什么使用分支?

分支在开发流程中提供了诸多好处:

  • 隔离:将不同的任务(功能、错误修复、实验)分开。
  • 协作:多个开发者可以在不同的分支上工作,而不会相互干扰。
  • 安全实验:在不影响生产代码的情况下测试更改。
  • 版本控制:轻松回滚或切换到项目的不同版本。

在 Git 中,默认分支通常被称为 main。然而,可以根据不同目的创建新的分支,例如:

  • 功能修复(feature/new-ui):用于开发新功能。
  • 修复分支(hotfix/login-fix):用于修复生产中的问题。
  • 发布分支(release/v1.2.0):用于准备部署的稳定版本。

接下来,我们以下面四个主题讨论分支管理

  • 创建和管理本地分支
  • 合并分支
  • 远程分支和分支跟踪
  • 分支工作流程(功能分支、热修复和发布)

创建和管理本地分支

正如前面提到的,Git 分支允许你在不影响主代码库的情况下开发新功能、修复错误或进行实验。以下是高效创建、切换、重命名和删除分支的方法。

1.创建新分支

git branch feature/create-article
  • 创建一个名为 feature/create-article 的新分支,但不会切换到该分支。
  • 当你需要准备多个分支但不想立即切换时,可以使用

2.切换到分支

git checkout feature/create-article
  • 切换到指定的分支、

现代替代方法:可以使用 git switch

git switch feature/create-article
  • 这是 cheackout 的替代方法

3.创建并切换到新分支

git checkout -b feature/create-article-2
  • 创建一个新分支并立即切换到该分支
  • 通过将两条命令合并为一条,节省了时间

现代替代方法

git switch -c feature/create-article-2

4.列出所有分支

git branch
  • 显示所有本地分支。当前分支会用 * 标记
  feature/create-article
* feature/create-article-2main
  • 这有助于 跟踪可用分支并切换到它们之间

要列出远程分支

git branch -a

5.重命名分支

git branch -m feature/create-article-2 feature/create-article-1
  • 将分支 feature/create-article-2 重命名为 feature/create-article-1

如果你已经在要重命名的分支上:

git branch -m feature/create-article-1

6.安全删除本地分支

git branch -d feature/create-article-1
  • 只有当分支已经被合并到另一个分支时,才会删除该分支。
  • 如果分支有未合并的更改,Git 会阻止删除,以避免数据丢失。

7.强制删除分支(危险)

git branch -D feature/create-article
  • 即使分支有未合并的更改,也会删除该分支。
  • 小心使用,以免丢失重要工作。

合并分支

在 Git 中,合并 是将一个分支的更改整合到另一个分支的过程。它通常用于将不同开发分支的更新合并到 main 分支。

1.将分支合并到当前分支

git merge feature/create-article
  • 这会将 feature/create-article 的更改整合到你当前所在的分支。
  • 如果没有冲突,Git 会自动完成合并。

在合并之前,请确保你在正确的分支上:

git checkout main
git merge feature/create-article

2.解决合并冲突

在合并过程中,如果存在冲突,Git 会暂停合并过程,并通知你冲突的文件。

编辑这些文件以解决冲突,冲突标记如下:

<<<<<<< HEAD
(当前分支的更改)
=======
(要合并分支的更改)
>>>>>>> main
  • HEAD 部分代表当前分支的更改。
  • ======= 以下的部分来自要合并的分支

解决冲突的步骤

  1. 在文本编辑器或 VS Code 中打开冲突文件。
  2. 手动编辑并保留正确的代码版本。
  3. 标记文件为已解决:
git add .
  1. 通过提交完成合并:
git commit -m "解决冲突文件。"

要放弃合并并返回到之前的状态:

git merge --abort

Git 合并类型

Git 根据分支是否分叉支持不同的合并策略。

1.快速前进合并(无分叉)

当要合并的分支领先于当前分支且当前分支没有任何更改时,会发生快速前进合并。

Git 会将分支指针向前移动,而不是创建合并提交。

示例

git checkout main
git merge feature/create-article
  • main 自从 feature/create-article 分支创建以来没有更改时,这会生效。
Updating 5a26f39..db14708
Fast-forwardfilename.txt | 1 +1 file changed, 1 insertion(+)create mode 100644 filename.txt

2.三方合并(分叉分支)

当两个分支有不同的历史且无法快速前进时,会发生三方合并。

Git 会创建一个新的合并提交来合并更改。

git checkout main
git merge feature/create-article

你会看到类似以下的提交信息:

Merge branch 'feature/create-article' into main

远程分支和分支跟踪

远程分支是存储在远程仓库(GitHub、GitLab、Bitbucket)中的分支版本。

这些分支允许多个开发者通过保持本地仓库与远程仓库同步进行协作。

为什么使用远程分支?

  • 通过推送和拉取更改与其他开发者协作
  • 在中央仓库中备份工作
  • 管理不同环境(main、dev、staging)

1.列出远程分支

要查看远程仓库中存储的所有分支:

git branch -r
  • 这只会列出远程分支,以 origin/ 为前缀。

要列出本地和远程分支:

git branch -a
  • 这有助于检查哪些分支在本地和远程存在。

2.创建跟踪远程分支的本地分支

如果你想在本地使用远程分支,可以使用以下命令:

git checkout --track origin/dev
  • 这会创建一个本地分支,自动跟踪远程分支。

返回结果如下

分支 'dev' 设置为跟踪 'origin/dev'。
切换到新分支 'dev'
  • 当 Git 没有自动跟踪分支时,这非常有用。

3.跟新远程分支

从远程仓库获取更新,确保你拥有最新的分支列表:

git fetch
  • 这会下载远程更改,但不会将它们应用到你的工作目录。

4.将远程分支的更改合并到当前分支

要将远程分支的最新更新拉取到你的本地分支:

git pull origin main

这相当于运行以下命令:

git fetch
git merge origin/main

如果分支已经跟踪 origin/<分支名>,你可以直接运行:

git pull
  • 如果发生冲突,请手动解决冲突并提交更改。

5.将新的本地分支推送到远程仓库

在本地创建新分支后,将其推送到远程仓库:

git push --set-upstream origin de
  • –set-upstream 标志设置了跟踪,这样未来的 git pullgit push 命令就可以在不指定远程分支的情况下运行。

6.删除远程分支

如果远程分支不再需要,可以使用以下命令删除:

git push origin --delete dev
  • 这会从远程仓库中删除 origin/dev

要删除本地对已删除远程分支的引用:

git remote prune origin

分支工作流程(功能分支、热修复和发布)

本指南概述了使用 Git 分支进行功能开发、热修复和发布的典型工作流程。

目标是展示如何部署版本、修复错误并推出新功能。

1.功能分支

功能分支允许你在不影响主代码库的情况下独立开发新功能。

最好创建并明确指定这些功能分支。

git checkout -b feature/create-article
  • 在功能分支上进行开发并提交更改,随着进度定期提交。
  • 将功能分支合并到 maindev 分支。
git checkout dev
git merge feature/create-article

2.热修复分支

热修复用于在生产环境中紧急修复错误,通常基于 main 分支。

  • dev 分支创建新的热修复分支:
git checkout -b hotfix/main-article dev
  • 在热修复分支上进行修复并提交。
  • 将热修复分支合并到 main 分支:
git checkout dev
git merge hotfix/main-article dev

3.发布分支

发布分支用于准备软件的新版本以供生产使用。它们允许进行测试和版本管理。

  • dev 分支创建新的发布分支:发布分支应基于 dev 分支,以包含所有新功能。
git checkout -b release/1.0.0 dev
  • 进行测试和准备发布,根据需要提交更改。
  • 将发布分支合并到 main 分支并标记发布版本。
git checkout main
git merge release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"
  • 为确保在发布过程中所做的最终更改能够合并回 dev 分支,请执行以下操作:

git checkout dev
git merge release/1.0.0

以上就是关于 Git 分支的完整指南,涵盖了从基础概念到实际操作的各个方面。通过合理使用分支,你可以更高效地管理代码开发流程,无论是开发新功能、修复紧急问题,还是准备版本发布,分支都能提供强大的支持。

相关文章:

Git 分支指南

什么是 Git 分支&#xff1f; Git 分支是仓库内的独立开发线&#xff0c;你可以把它想象成一个单独的工作空间&#xff0c;在这里你可以进行修改&#xff0c;而不会影响主分支&#xff08;或 默认分支&#xff09;。分支允许开发者在不影响项目实际版本的情况下&#xff0c;开…...

教育系统源码如何支持白板直播与刷题功能?功能开发与优化探索

很多行业内同学疑问&#xff0c;如何在教育系统源码中支持白板直播和刷题功能&#xff1f;本篇文章&#xff0c;小编将从功能设计、技术实现到性能优化&#xff0c;带你全面了解这个过程。 一、白板直播功能的核心需求与技术挑战 实时交互与同步性 白板直播的核心是“实时性”。…...

SSM框架整合MyBatis-Plus的步骤和简单用法示例

以下是 SSM框架整合MyBatis-Plus的步骤 和 简单用法示例&#xff1a; 一、SSM整合MyBatis-Plus步骤 1. 添加依赖&#xff08;Maven&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.…...

【LeetCode 热题 100】206. 反转链表

&#x1f4cc; 难度&#xff1a;简单 &#x1f4da; 标签&#xff1a;链表、双指针、迭代、递归 &#x1f517; 题目链接&#xff08;LeetCode CN&#xff09; &#x1f9e9; 一、题目描述 给你单链表的头节点 head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 ✅…...

centos8.5.2111 更换阿里云源

使用前提是服务器可以连接互联网 1、备份现有软件配置文件 cd /etc/yum.repos.d/ mkdir backup mv CentOS-* backup/ 2、下载阿里云的软件配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo 3、清理并重建…...

再度深入理解PLC的输入输出接线

本文再次重新梳理&#xff1a; 两线式/三线式传感器的原理及接线、PLC的输入和输出接线&#xff0c;深入其内部原理&#xff0c;按照自己熟悉的方式去理解该知识 在此之前&#xff0c;需要先统一几个基础知识点&#xff1a; 在看任何电路的时候&#xff0c;需要有高低电压差&…...

k8s(11) — 探针和钩子

钩子和探针的区别&#xff1a; 在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;钩子&#xff08;Hooks&#xff09;和探针&#xff08;Probes&#xff09;是保障应用稳定运行的重要机制&#xff0c;不过它们的用途和工作方式存在差异&#xff0c;以下为你详细介绍&…...

使用jmeter对数据库进行压力测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 很多人提到 jmeter时&#xff0c;只会说到jmeter进行接口自动化或接口性能测试&#xff0c;其实jmeter还能对数据库进行自动化操作。个人常用的场景有以下&…...

Scala与Go的异同教程

当瑞士军刀遇到电锯&#xff1a;Scala vs Go的相爱相杀之旅 各位准备秃头的程序猿们&#xff08;放心&#xff0c;用Go和Scala不会加重你的发际线问题&#xff09;&#xff0c;今天我们来聊聊编程界的"冰与火之歌"——Scala和Go的异同。准备好瓜子饮料&#xff0c;我…...

LeetCode 热题 100 138. 随机链表的复制

LeetCode 热题 100 | 138. 随机链表的复制 大家好&#xff0c;今天我们来解决一道经典的链表问题——随机链表的复制。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求深拷贝一个带有随机指针的链表。 问题描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额…...

Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南

一、Secret核心类型解析 类型使用场景自动管理机制典型字段Opaque (默认)自定义敏感数据需手动创建data字段存储键值对kubernetes.io/dockerconfigjson私有镜像仓库认证kubelet自动更新.dockerconfigjsonkubernetes.io/tlsTLS证书管理Cert-Manager可自动化tls.crt/tls.keykube…...

05 mysql之DDL

一、SQL的四个分类 我们通常可以将 SQL 分为四类&#xff0c;分别是&#xff1a; DDL&#xff08;数据定义语言&#xff09;、DML&#xff08;数据操作语言&#xff09;、 DCL&#xff08;数据控制语言&#xff09;和 TCL&#xff08;事务控制语言&#xff09;。 DDL 用于创建…...

电池热管理CFD解决方案,为新能源汽车筑安全防线

在全球能源结构加速转型的大背景下&#xff0c;新能源汽车产业异军突起&#xff0c;成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统&#xff0c;其热管理技术的优劣&#xff0c;直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…...

使用互斥锁保护临界

Linux线程互斥及相关概念解析 1. 临界资源&#xff08;Critical Resource&#xff09; 定义&#xff1a;被多个线程共享的资源&#xff08;如变量、文件、内存区域等&#xff09;&#xff0c;需通过互斥访问确保数据一致性。特点&#xff1a; 共享性&#xff1a;多个线程可能…...

Android第三次面试总结之网络篇补充

一、网络模型&#xff1a;OSI 七层 vs TCP/IP 四层&#xff08;必考点&#xff09; 1. 分层模型对比 OSI 七层模型TCP/IP 四层模型核心功能Android 相关场景应用层&#xff08;7 层&#xff09;应用层定义数据格式&#xff08;HTTP/HTTPS/FTP/API&#xff09;OkHttp/Retrofit…...

网络世界的“快递站”:深入浅出OSI七层模型

网络世界的“快递站”&#xff1a;OSI七层模型的奇妙旅程 为什么需要OSI七层模型&#xff1f; 想象一下&#xff0c;你正在给朋友寄一份生日礼物。你需要先包装礼物、贴上地址标签、选择快递公司、支付运费&#xff0c;最后把包裹交给快递员。这个过程看似简单&#xff0c;但…...

使用 Apache POI 生成包含文本和图片的 Word 文档

一、概述 在实际开发场景中&#xff0c;我们经常需要自动生成包含文本和图片的 Word 文档。本示例借助 Apache POI 库&#xff0c;实现了向 Word 文档中插入文本和图片的功能。代码会循环插入多次文本和同一张图片&#xff0c;并且对图片进行等比缩放处理&#xff0c;以保证图片…...

TransmittableThreadLocal:穿透线程边界的上下文传递艺术

文章目录 前言一、如何线程上下文传递1.1 ThreadLocal单线程1.2 InheritableThreadLocal的继承困境1.3 TTL的时空折叠术 二、TTL核心设计解析2.1 时空快照机制2.2 装饰器模式2.3 采用自动清理机制 三、设计思想启示四、实践启示录结语 前言 在并发编程领域&#xff0c;线程上下…...

基于STM32的甲醛检测

一、制作目标 以正点原子的miniSTM32F103RCT6开发板为主控&#xff0c;使用甲醛传感器检测环境空气中的甲醛含量&#xff08;以mg/m^3为单位&#xff09;、C02含量&#xff08;以ppm为单位&#xff09;和总有机挥发物含量TVOC&#xff08;以mg/m^3为单位&#xff09;在OLED显示…...

洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术

目录 一、洛图报告新焦点&#xff1a;FSHD 为何成为显示产业重要突破方向&#xff1f; &#xff08;一&#xff09;洛图报告核心结论&#xff1a;从技术突围到产业重构 二、技术解析&#xff1a;FSHD 如何重构显示底层逻辑&#xff1f; &#xff08;一&#xff09;物理架构…...

含锡电镀废水深度净化技术体系解析化利用的全流程优化

一、含锡电镀废水的产生机理与污染特征 含锡电镀废水主要形成于三个关键生产环节&#xff1a;镀槽液定期置换排放、镀件后处理清洗水以及车间地面冲洗水。其中&#xff0c;清洗水作为电镀工艺的附属产物&#xff0c;承担着清除镀层表面残留镀液的重要功能&#xff1b;冲刷废水则…...

【MySQL】事务(重点)

目录 一、什么是事务&#xff1a; 二、事务的前置知识了解 引擎是否支持事务 事务的提交方式 事务操作的前置准备&#xff1a; 三、事务回滚&#xff1a; 四、事务崩溃&#xff1a; 原子性&#xff1a; 持久性&#xff1a; 五、自动提交和手动提交&#xff1a; 六、…...

Linux:线程同步与互斥

目录 线程互斥 锁 初始化 销毁 加锁 解锁 线程同步 条件变量 初始化 销毁 等待条件满足 唤醒等待 pthread_cond_signal pthread_cond_broadcast 生产者消费者模型 3种关系 2种角色 1个交易场所 POSIX信号量 初始化 销毁 等待 发布 线程互斥 互斥相关…...

每天五分钟机器学习:拉格朗日对偶函数

本文重点 在数学优化领域,拉格朗日对偶函数作为连接原始约束问题与对偶问题的核心纽带,展现了将复杂约束优化转化为无约束优化的方式。 数学表达 原始问题建模 拉格朗日函数构造 此时的目标就是: 先假设w为常数,让拉格朗日函数对橙子变量λ求极大值,消掉λ之后,在对λ求…...

AutoGen 框架解析:微软开源的多人 Agent 协作新范式

一、引言 在大语言模型&#xff08;LLM&#xff09;快速发展的今天&#xff0c;复杂任务的自动化协作需求日益增长。微软开源的AutoGen 框架&#xff08;GitHub Star 超 10 万&#xff09;提供了一种基于多智能体对话的协作范式&#xff0c;通过自然语言交互实现多角色 Agent …...

【bibtex4word】在Word中高效转换bib参考文献,Texlive环境安装bibtex4word插件

前言 现已退出科研界&#xff0c;本人水货一个。希望帮到有缘人 本篇关于如何将latex环境中的参考文献bib文件转化为word&#xff0c;和一些踩坑记录。 可以看下面的资料进行配置&#xff0c;后面的文字是这些资料的补充说明。 参考文章&#xff1a;https://blog.csdn.net/g…...

Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException

看了二哥的foreach陷阱后&#xff0c;自己也遇见了需要循环删除元素的情况&#xff0c;立马想到了当时自己阴差阳错的避开所有坑的解决方式&#xff1a;先倒序遍历&#xff0c;再删除。之前好使&#xff0c;但是这次不好使了&#xff0c;报错Caused by: java.lang.UnsupportedO…...

k8s node 报IPVS no destination available

在 Kubernetes 集群中&#xff0c;IPVS no destination available 错误通常表示 kube-proxy&#xff08;IPVS 模式&#xff09;无法为 Service 找到可用的后端 Pod。这会导致流量无法正确转发&#xff0c;影响服务可用性。以下是详细的排查和解决方法&#xff1a; 一、错误原因…...

单片机-STM32部分:10-2、逻辑分析仪

飞书文档https://x509p6c8to.feishu.cn/wiki/VrdkwVzOnifH8xktu3Bcuc4Enie 安装包如下&#xff1a;根据自己的系统选择&#xff0c;目前这个工具只有window版本哦 安装方法比较简单&#xff0c;都按默认下一步即可&#xff0c;注意不要安装到中文路径哦。 其余部分参考飞书文档…...

计算机网络基础科普

IP地址是计算机网络中标识设备的唯一地址 IPv4&#xff08;32位&#xff09;IPv6&#xff08;128位&#xff09; 1.IPv4&#xff08;32位&#xff09; 简介&#xff1a;IPv4&#xff08;Internet Protocol version 4&#xff09;是互联网协议&#xff08;IP&#xff09;的…...