Git 分支管理详解

2023-05-16

1.前言 

我们先来说一个简单的案例吧,你们团队中有多个人再开发一下项目,一同事再开发一个新的功能,需要一周时间完成,他写了其中的30%还没有写完,如果他提 交了这个版本,那么团队中的其它人就不能继续开发了。但是等到他全部写完再全部提交,大家又看不到他的开发进度,也不能继续干活,这如何是好呢? 

对于上面的这个问题,我们就可以用分支管理的办法来解决,一同事开发新功能他可以创建一个属于他自己的分支,其它同事暂时看不到,继续在开发分支(一般都 有多个分支)上干活,他在自己的分支上干活,等他全部开发完成,再一次性的合并到开发分支上,这样我们既可知道他的开发进度,又不影响大家干活,是不是很 方便呢? 

分支本质上其实就是一个指向某次提交的可变指针。Git 的默认分支名字为 master 。而我们是怎么知道当前处于哪个分支当中呢?答案就是在于 HEAD 这个十分特殊的指针,它专门用于指向于本地分支中的当前分支。我们可以简单理解为:commit <- branch <- HEAD (注,本来我们详细说一下HEAD的,这个东西真不好说,goole了一下也没几个大神说这个。下面我就通过讲解帮助大家理解,简单的说HEAD就 是指向于本地分支中的当前分支,如下图:) 下面我们来创建分支。 

2.创建分支 

当我们需要调试某个Bug或者尝试添加或修改程序中的某个模块,而又不能影响主分支的开发时。就可以通过创建分支来满足需求。创建分支相当于是创建一个新的分支指针指向当前所在的提交。我们在Commit3上创建dev分支: 

如下图所示,dev分支指向Commit3。 

从上图可知,虽然我们创建了一个新分支,但是 HEAD 仍然指向 master 。如果希望在创建分支的同时切换到新分支上,我们可以通过以下命令实现: 

git checkout命令加上-b参数表示创建并切换分支上。 

3.切换分支 

切换当前分支我们可以用以下命令实现: 

git branch -a 命令可以查看所有分支,现在我们HEAD指针便指向dev分支,大家可以在上图中看到dev分支上有个*号。 

下面我们修改一下readme.txt中的内容,并在dev分支上提交一下。如下图: 

用流程图演示上述过程如下: 

现在我们在dev分支上完成工作,现在到master分支上。如下图: 

流程图表示如下: 

切换回master分支后,再查看一个readme.txt文件,如下图: 

大家可以看到我们刚才增加的一行内容不见了,嘿嘿。因为那个提交是在dev分支上,而master分支没有变化。好了,下面我们来演示一下合并分支。 

4.合并分支(快速合并) 

现在,我们把dev分支的工作成果合并到master分支上,如下图: 

git merge 命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。如下图: 

大家注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度 非常快。当然,也不是每次合并都能Fast-forward,我们后面会将其他方式的合并。合并完成后,就可以放心地删除dev分支了。 

5.删除分支 

下面我们来演示一下删除分支,如下图: 

大家在实际操作中可以发现在我们创建、合并、删除分支的速度非常快吧,这和直接在master分支上工作效果是一样的,但过程更安全,更可靠。下面我们来简单的总结一下: 

  • 查看分支 git branch -a 
  • 创建分支 git branch name 
  • 切换分支 git checkout name 
  • 创建并切换 git checkout -b name 
  • 合并某分支到当前分支 git merge name 
  • 删除分支 git branch -d name 

6.分支合并冲突 

下面我们来演示一下不同分支修改同一个文件产生冲突问题,下面我们来创建一个新的分支,继续开发新功能: 

现在我们将分支切换到master分支上修改readme.txt内容并提交,如下图: 

这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,如下图: 

果然冲突了,Git告诉我们readme.txt文件存在冲突,必须手动解决冲突后再提交。下面我们用git status查看一下状态: 

下面我们来查看一下readme.txt中的内容,如下图: 

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,让我们选择要保留的内容,下面我们修改一下readme.txt,再次提交。如下图: 

好了,到这我们的分支合并冲突就讲解完成了,下面我们来删除分支。如下图: 

最后,我们可以用 git log --graph --pretty=oneline --abbrev-commit 命令,查看一下分支合并。 

7.合并分支(普通合并) 

分支合并分为快速合并与普通合并两种模式,普通合并,合并后的历史有分支记录,能看出来曾经做过合并,而快速合并就看不出来曾经做过合并。下面我们来演示一下普通合并, 

大家可以看到我们这次合并用的普通模式合并,--no-ff参数表示禁用快速合并。下面我们用git log命令查看一下合并历史: 

注,合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支记录,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。如下图: 

1).快速合并

2).普通合并

8.分支管理策略 

下面我们来说一下一般企业中开发一个项目的分支策略: 

  • 主分支 master 
  • 开发分支 develop 
  • 功能分支 feature 
  • 预发布分支  release 
  • bug 分支 fixbug 
  • 其它分支 other 

1).主分支 master

代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 

Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。 

2).开发分支 develop

主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。 

这个分支可以用来生成代码的最新代码版本。如果想正式对外发布,就在Master分支上,对Develop分支进行"合并"(merge)。 

3).功能分支 feature

功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。 

功能分支的名字,可以采用feature-*的形式命名。 

4).预发布分支  release

预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支是从Develop分支上面 分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。 

5).bug 分支 fixbug

bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。 

6).其它分支 other

还有就是其它分支了,大家可以根据需要创建即可…… 

9.团队多人开发协作 

在上面的章节中我们讲解了Git的分支管理策略,一般开发团队中有这样几个分支,master、develop、feature、release、 bug、other分支,或者你还有其它分支,那有博友会问了,你讲了那么多分支,都在本地放着我们怎么查看和推送分支到远程服务器上呢?嘿嘿,我们说大 家别急我们在这一章节中就来重点讲解,在团队多人协作中的分支推送与抓取。 

1).查看远程仓库分支

查看远程仓库的信息,如下图: 

大家可以看到git remote命令可以查看远程仓库,加-v选项可以查看详细信息。上面显示了你抓取和推送的origin(源)信息。 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程仓库的默认名称是origin。 

2).分支推送

下面我们来演示一下将本地分支推送到远程的仓库中,如下图: 

大家可以看到,我们的本地master分支与远程的master分支已同步。下面我们来演示一下同步dev分支,如下图: 

我本地有很多分支,有哪些分支需要推送到远程仓库中呢?一般是这样的, 

  • master 分支是主分支,要时刻与远程同步,一般我们发布最新版本就用master分支 
  • develop 分支是开发分支,团队中所有人都在这个分支上开发,所以也需要与远程同步 
  • bug 分支一般只在本地使用来修复bug,一般不需推送远程仓库中 
  • feature 分支是否需要推送到远程,要看是不是有几个人合作开发新功能,如果你是一个开发,那就留在本地吧 
  • release 分支一般是系统管理,推送或抓取的分支一般与开发人员无关 
  • other 分支大家按需求分配 

3).分支抓取

现在你一同事在电脑上克隆一份仓库,我们来演示一下。 

生成公钥: 

将生成的公司增加到git服务器上: 

克隆远程版本库: 

我们现在查看一下分支: 

你同事要在dev分支上开发,就得创建与远程origin一样的dev分支到本地的仓库上,下面我们来创建一下: 

现在你同事就可以在dev分支上开发了,下面我们新建一些文件并提交到远程dev分支: 

你的同事向origin/dev分支提交了一个index.html页面,现在你也在修改这个文件,并提交: 

推送失败,因为你同事的最新提交和你推送的提交有冲突,Git提示我们,先用git pull把最新的提交从origin/dev抓下来,然后在本地合并解决冲突,再推送: 

git pull 失败了,原因是没有将dev分支与远程origin/dev分支进行链接,Git提示我们设置dev和origin/dev的链接: 

下面我们再来git pull一下试试: 

git pull 成功,但是合并有冲突需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后提再push: 

好了,这样的我们的远程推送与抓取就讲解完成了,下面我们来总结一下。 

10.总结 

一般在团队中多人开发模式是这样的:首先,可以试图用git push origin branch-name推送自己的修改如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并如果合并有冲突,则解决冲突,并在本地提交没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git 分支管理详解 的相关文章

  • Java学习 - 黑马(第二部分) - 随堂笔记 - 07_内部类

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 07 内部类 1 内部类 1 1 内部类概述 内部类 xff1a 就是在一个类中定义一个类 举例 xff1a 在一个类A的内部定义一个类B xff0c 类B就被称为内部类 内部
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 08_常用API

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 08 常用API 1 Math 1 1 Math类概述 Math包含执行基本数字运算的方法 没有构造方法 xff0c 如何使用类中的成员呢 xff1f 通过查看帮助文档 看类的
  • Java学习 - 黑马 - 随堂笔记 - 第二部分总目录

    Java学习 黑马 随堂笔记 第二部分总目录 本内容仅为个人看视频记录的随手笔记 xff0c 部分内容可能不全面 xff0c xff0c 可以作为学习黑马程序员Java基础视频参考使用或者看完之后进行复习巩固使用 Java学习 黑马 xff
  • Java学习 - 黑马 - 随堂笔记 - 第一部分总目录

    Java学习 黑马 随堂笔记 第一部分总目录 本内容仅为个人看视频记录的随手笔记 xff0c 部分内容可能不全面 xff0c xff0c 可以作为学习黑马程序员Java基础视频参考使用或者看完之后进行复习巩固使用 Java学习 黑马 随堂笔
  • Java学习 - 黑马(第二部分) - 随堂笔记 - 09_异常

    Java学习 黑马 xff08 第二部分 xff09 随堂笔记 09 异常 1 异常 1 1 异常概述 package com itheima 01 import java lang reflect Method 异常 public cla
  • MATLAB2021b详细安装教程

    1 下载软件安装包 2 安装 下载安装包后打开iso文件 xff0c 若是无法打开请用解压软件打开 打开MATLAB R2021b win64 xff0c 双击软件开始安装 一直点击下一步 xff0c 直到步骤 选择我已有我的许可证的文件密
  • 新睿云科普:什么叫云技术?云技术是如何发展到如今的?

    云技术是计算机系统资源 xff08 尤其是数据存储和计算能力 xff09 的按需可用性 xff0c 而无需用户直接进行主动管理 该术语通常用于描述Internet上可供许多用户使用的数据中心 在当今占主导地位的大型云通常具有从中央服务器分布
  • 酷炫cmd命令行工具——windows terminal的详细配置

    官网配置地址 xff1a An overview on Windows Terminal Microsoft Docs 目录 一 Windows terminal安装与基本操作 1 Windows Terminal下载 2 不同命令行工具切
  • RIME中州韵输入法词库扩充(搜狗词库,QQ拼音词库,清华词库,拆字词库U模式等)

    Rime输入法作为一款高度自定义的本地输入法 xff0c 词库的配置尤为重要 1 Rime输入法词库格式 Rime输入法的词库在用户配置文件夹下 xff0c 是以 dict yaml结尾的文件 2 Rime输入法词库如何调用 Rime可以扩
  • 超全超详细Rime中州韵输入法配置指南

    1 为什么选择RIME 市面上具有众多的输入法 xff0c 无论搜狗还是QQ输入法基本都大同小异 xff0c 但RIME是众多输入法中一个特殊的存在 之所以特殊 xff0c 原因在于 xff0c 绝大部份输入法工具 xff0c 长什么样 能
  • MATLAB2022a更新了,看MATLAB2022详细安装教程

    MATLAB是很多学生党 xff0c 科研人需要的工具 xff0c 这款软件每年更新两次 xff0c 上半年为年份 43 a xff0c 下半年为年份 43 b xff0c 2022a如约而至 这次更新包含了 5 款新产品和 11 项重要更
  • 中国计算机设计大赛作品(附代码与设计书,答辩PPT)

    1 主界面 2 目录界面 3 离散信号的产生 4 离散信号的基本变换及运算 变换 运算 5 离散信号的卷积运算 6 离散信号的卷积运算 7 系统稳定性分析 8 傅立叶变换 9 FIR滤波器设计 10 IIR滤波器设计 11 语音去噪处理 录
  • 更改pip镜像源的多种方法

    目前可用的pip国内镜像源有下面这些 xff1a 阿里云 http mirrors aliyun com pypi simple 中国科技大学 https pypi mirrors ustc edu cn simple 豆瓣 http py
  • 详细介绍MATLAB导入文本文件、excel等数据文件

    一 通过导入工具导入 选择导入工具 选择文件 二 通过函数uiimport导入 xff08 推荐 xff09 使用uiimport导入数据比较方便 xff0c 输入后会自动弹出对话框选择文件或者剪贴板内容 进阶命令如下 xff1a uiim
  • 机器学习(一):概述

    机器学习近年来发展迅速 xff0c 那什么是机器学习呢 xff1f 其实机器学习在我们每天的生活 工作中都随处可见机器学习的应用 比如你每天打开手机 xff0c 无论是打开短视频软件 xff0c 还是逛购物软件 xff0c 这些里面都是包含
  • 机器学习(二):聚类算法1——K-means算法

    Kmeans是一种经典的聚类算法 xff0c 所谓聚类 xff0c 是指在没有给出目标的情况下 xff0c 将样本根据某种关系分为某几类 那在kmeans中 xff0c 是根据样本点间的距离 xff0c 将样本n分为k个类 K means实
  • 调制中的归一化因子如何计算?

    归一化因子的作用 xff1a 将功率 xff08 能量 xff09 进行归一化处理 添加功率归一化因子 xff0c 目的在于使得不同调制方式 xff08 或者说对于所有映射方式 xff09 都能够取得相同的平均功率 归一化因子 计算公式 x
  • 画图软件origin-柱状图断点设置

    OriginLab为中国学生提供了 免费半年正版中文 OriginPro xff1b 注册完毕后登录学校邮箱 xff0c 请根据邮件提示完成安装注册即可 xff0c 然后会发送安装教程给你 下载 xff0c 并安装典型使用方法 2 1 柱状
  • plot无法画图---已解决

    项目场景 xff1a plot画图 BUG两则 记录小bug xff1a 问题描述 用vscode开发中 xff0c 需要进行plot输出 xff0c 之前一直没问题 xff0c 近日plot无输出 xff0c 程序直接结束 xff0c 不
  • 条件判断中 两个等号(==)和三个等号(===)的区别

    1 两个等号 61 61 是抽象相等运算符 xff1b 三个等号 61 61 61 是 严格相等运算符 2 两个等号 61 61 运算符是在进行必要的类型转换后 xff0c 再比较 xff1b 如果比较的值 xff0c 一个是字符串 xff

随机推荐

  • Windows11连接共享打印机指定的网络名不再可用

    连接的设备是Windows11连接的Windows10打印机 一 共享网络打印机 xff08 附上共享打印机的教程 xff09 共享打印机官网教程 二 共享后指定的网络名不再可用 网上搜索后 xff0c 大体的步骤就是检查几个服务是否打开
  • 「计网四」网络层(上篇)

    文章目录 一 网络层概述二 网络层提供的两种服务三 IPv43 1 IPv4地址概述3 2 分类编址的IPv4地址3 3 划分子网的IPv4地址3 4 无分类编址的IPv4地址3 5 IPv4地址的应用规划 四 IP数据报的发送和转发过程五
  • Navicat连接MySQL出错:1251 - Client does not support authentication protocol requested by server……

    1251 Client does not support authentication protocol requested by server 游海东的技术专栏 CSDN博客 Navicat连接不上MySQL8 0问题的解决方法 终于对了
  • Huawei2288H V5 服务器重做RAID0

    Huawei服务器v5版本重做RAID0 xff1a 因为环境需求需要对三台Huawei服务器重做RAID xff0c 但是试过了百度的ctrl 43 C ctrl 43 H ctrl 43 A都是进 不去 xff0c 和网上百度的图片对比
  • 大数据之(一)Mapreduce

    MapReduce xff08 一 xff09 1 Mapreduce概述1 1定义1 2优缺点1 3核心思想1 4MapReduce进程1 5常用数据序列化类型1 6MapReduce编程规范1 7WordCount案例实操 2 Hado
  • 在Docker Debian容器中安装ps、top等命令

    有些debian镜像默认没有包括进程管理相关工具 xff0c 在实际使用时可能有些麻烦 xff0c 如果需要也可以自己安装 xff0c 使用如下命令 span class token function apt get span update
  • LCD液晶屏没有点亮,为什么会自动出现笔段、走线、乱码等现象?

    一般LCD段码液晶屏在不触碰的情况下 xff0c 是不会产生这种自动出现笔段 走线 乱码等现象 只有在物体或手碰到液晶屏的时候才会或多或少的出现这种问题 xff0c 而造成这种现象的是 静电 静电是一种处于静止状态的电荷 在干燥和多风的秋天
  • 用Java解决牛客网华为机试题目HJ9

    题目描述 输入一个int型整数 xff0c 按照从右向左的阅读顺序 xff0c 返回一个不含重复数字的新的整数 输入描述 输入一个int型整数 输出描述 按照从右向左的阅读顺序 xff0c 返回一个不含重复数字的新的整数 import ja
  • 关于word中的插件Grammarly使用

    Grammarly插件嵌入到word中 xff0c 可以帮助检查语法错误 没有账号的话注册 1 xff09 下载 链接 xff1a https www grammarly com office addin xff08 第二个 xff09 注
  • Dev C++ 5.11版 「时代 の 眼泪」安装指南

    介绍 Dev C 43 43 是一款轻量化的 C C 43 43 桌面 IDE xff0c 由于不需要额外配置 GCC 即开即用的特点 xff0c 因此常常用于 C C 43 43 语言基础的学习 目前官方最新版为 Dev C 43 43
  • 快速入门RabbitMQ(详细)第二篇:RabbitMQ五种工作模式的使用及总结

    4 RabbitMQ工作模式 4 1 Work queues工作队列模式 Work Queues 与入门程序的 简单模式 相比 xff0c 多了一个或一些消费端 xff0c 多个消费端共同消费同一个队列中的消息 应用场景 xff1a 对于
  • BGP邻居状态机

    idle connect 已经建立完成了TCP三次握手 open sent open confirm establish connect 和 active 都是 TCP 连接阶段 active 是发起方 connect 是应答方 Idle
  • bgp LP本地优先属性配置与详解

    实验目的 xff1a 1 理解掌握BGP的本地优选属性概念和配置方法 2 本地优选的属性默认值为100 xff0c 较高值的路径会被优先选择 3 本地优先属性 xff0c 决定离开本自治系统最佳的路径 实验拓扑 xff1a 步骤1 接口IP
  • 什么是pretext tasks?

    1 大约是个啥 xff1f pretext tasks 通常被翻译作 前置任务 或 代理任务 xff0c 有时也用 surrogate task 代替 2 必须具有两个关键点 xff1a 1 这种训练不是我们本身的训练任务 xff0c 并不
  • Typora自定义主题样式

    Typora自定义主题样式 1 打开Typora开发者工具 视图 gt 开发者工具 xff08 Shift 43 F12 xff09 2 使用选区工具选中想要更改的元素 3 查看styles区域 4 修改颜色并预览 修改步骤 xff1a 打
  • 整理学习之Batch Normalization(批标准化)

    Batch Normalization 1 归一化 归一化是一种常用于数据预处理的方法 根据需求定义将数据约束到固定的一定范围 希望转化后的数值满足一定的特性 xff08 分布 xff09 在神经网络的训练中 xff0c 数值更大的参数会对
  • 整理学习之注意力机制

    假如我们现在在电脑前看电影 xff0c 那么我们的注意力一定是集中在显示器而忽略键盘鼠标等物 注意力机制 实际上就是想将人的感知方式 注意力的行为应用在机器上 xff0c 让机器学会去感知数据中的重要和不重要的部分 在计算机算力资源的限制下
  • 整理学习之深度迁移学习

    迁移学习 xff08 Transfer Learning xff09 通俗来讲就是学会举一反三的能力 xff0c 通过运用已有的知识来学习新的知识 xff0c 其核心是找到已有知识和新知识之间的相似性 xff0c 通过这种相似性的迁移达到迁
  • Origin更改图的尺寸大小

    论文插入两张图片时大小不一致 xff0c 大大影响美观 这里介绍一种简单的设置图尺寸大小的方法 1 xff09 选择一张图片 xff0c 单击图片空白处 xff0c 按如下操作 2 xff09 选择另外一张图片 xff0c 按上面步骤 xf
  • Git 分支管理详解

    1 前言 我们先来说一个简单的案例吧 xff0c 你们团队中有多个人再开发一下项目 xff0c 一同事再开发一个新的功能 xff0c 需要一周时间完成 xff0c 他写了其中的30 还没有写完 xff0c 如果他提 交了这个版本 xff0c