【b站李同学的Lee】2 Git进阶【gitgithub】入门教程,必学!

课程地址:【【git&github】入门教程,必学!】 https://www.bilibili.com/video/BV1cE411G7yc/?share_source=copy_web&vd_source=b1cb921b73fe3808550eaf2224d1c155

目录

2 Git进阶

2.1 分支

2.1.1 分支细分

2.1.2 分支命令

1查看分支

2 创建分支

3 切换分支

4 合并分支

5 删除分支

2.2 暂时保存更改


2 Git进阶

2.1 分支

为便于理解,暂时可以认为分支就是当前工作目录中代码的一份副本。

使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。

比如在一个分支上开发新功能,在另一个分支上修复bug。

2.1.1 分支细分

1 主分支(master):第一次向git仓库提交更新记录时自动产生的一个分支。

当第一次向git仓库提交项目状态时,git会自动产生一个以时间点分隔的线,这条线就是分支。

分支上每一个时间点都代表一次git提交。

git自动产生的这条分支叫做主分支,master就是主分支的名字。

2 开发分支(develop):作为开发的分支,基于master分支创建

git中,除了主分支以外,还可以基于主分支创建其他分支。

为什么要创建其他分支?创建其他分支,可以让我们从开发主线分离出来,以免影响开发主线。

在实际开发过程中,一定要保持开发主线的稳定性,也就是保持主分支中代码的稳定性。

主分支的代码一般是用于向外界发布的代码,所以一般开发工作不会在主分支上进行。

在开发过程中,都会创建一条开发分支,当功能在开发分支上完成之后,经过测试没有问题,再将开发分支的代码合到主分支上。

开发分支可以理解为主分支的副本,功能在副本上开发,开发完成后将副本中的代码拷贝到主分支上。

开发工程中,分支与分支之间是独立的,互不影响。

3 功能分支(feature):作为开发具体功能的分支,基于开发分支创建

在实际过程中,除了主分支和开发分支外,还会有功能分支。

功能分支基于开发分支创建,作用是开发一个独立的功能。

当功能开发完成后,将功能分支的代码合并到开发分支,此时功能分支就可以删除了。

当开发分支的功能累积到一定程度,将开发分支的代码合并到主分支上。

即具体的功能在功能分支上进行,具体的功能在功能分支上开发完成后,要将功能分支合并到开发分支。开发分支的功能累积到一定程度后,最终将开发分支合并到主分支。

为什么要这样做?因为开发分支也要保持最大程度的稳定性。

4 分支的其他功能

分支还可以存储不同软件的版本,比如jQuery,有1.0,2.0和3.0等版本。

不同版本的jQuery可以放在不同分支中分别开发。

2.1.2 分支命令

查看分支:git branch

创建分支:git branch 分支名称 

切换分支:git checkout 分支名称

合并分支:git merge 来源分支

删除分支(分支被合并后才允许删除 -D 强制删除):git branch -d 分支名称   

强制删除分支: git branch -D 分支名称

实践

1查看分支

git branch

查看分支

在当前仓库中有一个默认分支,master主分支。

master 是第一次向git仓库中提交项目状态时,git程序自动创建的。

* master,*表示当前处于master分支上。

如果存在多个分支,其他分支处于未选中的状态,那么分支的颜色是白色的,且分支名称前没有星号*

此外,git程序中工作目录后的括号,括号中显示的就是当前所在分支的分支名称。

2 创建分支

git branch 分支名称

创建分支,分支名称是自定义的。

注意:当前在哪个分支上进行的操作,就是在哪个分支上创建分支,相当于基于哪个分支创建副本

下面的命令含义就是基于master分支创建develop分支。

查看分支

现在分支列表中已经存在develop分支了。(现在仍然处于master主分支上)

 

3 切换分支

git checkout 分支名称

切换分支

现在已经切换到develop分支上了。

此时develop分支已经是绿色字体,且前有星号*,且工作目录后面的括号中也显示develop。

注意:切换分支之前,当前分支的工作已经要提交到git仓库中,保持当前分支的工作区是完全干净的状态,否则会出现问题。

在开发分支上创建的文件,在主分支上就不应该看到。

4 合并分支

git merge 来源分支

合并分支

场景:如果在当前分支上的工作已经完成,则可以将当前分支合并到其他分支中去。

实践:将开发分支合并到主分支上。

步骤1 切换到主分支上(站在主分支的角度合并开发分支)

步骤2 git merge 被合并的分支名称

注意:虽然这里将开发分支合并到主分支上,但是开发分支还是存在的。合并完成后,可以切换回开发分支,在开发分支上继续开发。

看一下合并分支的提示。

5 删除分支

git branch -d 分支名称

删除分支

如果某个分支上的工作已经完成,且这个分支不需要继续存在,此时可以删除这个分支。

d是delete的缩写。

实践

注意:如果要删除的分支没有被合并,那么默认这个分支是不能被删除的。这是git程序对分支的保护机制。防止开发人员误删文件。

如果这个分支真的没有合并,就是不需要了,可以强制删除。命令:git branch -D 分支名称。

实践:1 创建一个新分支;2 切换到这个新分支;3 在新分支上提交代码;4 切换到其他分支;5 强制删除这个新分支。

注意:如果要删除分支A,那么当前所处的分支不能是分支A。

2.2 暂时保存更改

2.1.2 说过在切换分支前,要将当前分支的所有改动提交才能切换分支,否则就会出现问题。

但是实际的开发过程中,经常遇到正在开发新功能,但此时测试过来说之前开发过的功能存在严重bug,必须要立即修复。

但是当前分支上的新功能还未开发完成,此时不想提交然后切换到新分支上修改bug。

遇到以上场景该怎么解决?

在git中,可以暂时提取分支上的所有改动并存储,让开发人员得到一个干净的工作副本(也就是说一个不存在任何改动的工作目录,然后就可以随意切换分支了),临时转向其他工作。

当修改完bug后,切换回原来的分支,就可以将刚才的改动恢复回来,然后继续开发新功能。

git提供了储藏功能。可以理解为剪贴板,可以提取分支上所有的改动并将改动保存起来。

使用场景:分支临时切换

存储临时改动:git stash

恢复改动:git stash pop

一旦所有的改动被恢复,那么剪贴板上就不存在这些改动。

注意:git的储藏功能是独立于分支的。即在其他分支上也可以执行储藏命令。如果其他分支上执行此命令,就会将这个改动恢复到其他分支上。所以执行命令前要搞清楚当前所在的分支是什么。

实践

1 创建新分支并切换到新分支上

2 将新分支上的改动add到暂存区

此时text分支有改动,不是一个干净的工作目录。此时是不能切换分支的。如果切换分支,text.html就会被携带到其他分支上(前提是text.html存到暂存区)。text.html提交后才能切换分支。但是有的时候不想提交,因为此时text.html上的工作没有完全完成。

stash命令,将当前分支上所有的命令先剪切出来,存到git提供的剪贴板。

实践

执行git stash,此时text分支上的改动就被存到剪贴板上了。命令行也给出了,工作目录已保存。

使用git status查看当前工作区的状态。

On branch text —— 此时处于text分支上。

Nothing to commit,working tree clean —— 没有什么可以提交,工作区是干净的状态。

此时就可以切换分支了。

切换到master分支,此时没有text.html文件。

然后再切换回text分支,执行git stash pop,text.html就回来了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-热题100:148. 排序链表

题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入: head [4,2,1,3] 输出: [1,2,3,4] 示例 2: 输入: head [-1,5,3,4,0] 输出: [-1,0,3,4,5] 示例…

unity学习(83)——细节名称和血条

眼中有细节,学习的过程才能平稳! 1.游戏更新时把名字也更新 代码如下: 效果如下: 2.因为是第三人称,从背后看,所以名称应该水平对称,翻转一下!rotate y180 游戏内效果如下&#xf…

升级xcode15 报错Error (Xcode): Cycle inside Runner

升级xcode15后报错 Could not build the precompiled application for the device. Error (Xcode): Cycle inside Runner; building could produce unreliable results. This usually can be resolved by moving the shell script phase Thin Binary so that it runs before th…

Python程序设计 列表

教学案例八 列表 1. 计算并显示斐波那契数列 输入n,计算并显示斐波那契数列前n项.一行打印5项,每项显示宽度为6 什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列、 因数学家莱昂纳多斐波那契&#xff…

FreeRTOS任务切换学习

FreeRTOS任务切换学习 所谓任务切换,就是CPU寄存器的切换。假设当由任务A切换到任务B时,主要分为两步: 1:需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场; 2&am…

【无标题】系统思考—心智模式

“直到你使无意识变为有意识,它将指导你的生活并且你会称之为命运。”—卡尔荣格 心智模式深藏于我们内心之中,它潜移默化地影响着我们对世界的理解和判断。往往这些影响是如此隐蔽,以至于我们自己都未必察觉到是什么在驱动我们的选择、决策…

【Entity Framework】聊聊EF中键

【Entity Framework】聊聊EF中键 文章目录 【Entity Framework】聊聊EF中键一、概述二、配置主键2.1 约定配置主键2.2 单个属性配置为实体主键2.3 组合主键 三、主键名称四、键类型和值五、备用键 一、概述 键用作每个实体实例的唯一标识符。EF中的大多数实体都有一个键&#…

VPP 负载均衡测试代码

1. 均衡的测试思想和流程说明。 先说一下理论, 然后后边才知道 代码逻辑。 调试了两天,这个代码终于通了。 由于时间关系, 画了一个粗略的图。另外这个代码只是流程通了,不过要帮助理解负载均衡我认为已经足够了。 下面是windo…

QT Creator概览

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、Qt Creator 概览 ①:菜单栏 ②:模式选择 ③:构建套件选择器…

【Keil5-Debug和发布版本配置】

Keil5-Debug和发布版本配置 ■ Keil5-Debug和发布版本配置■ 一:sct文件 sct文件配置■ 二:发布版本不需要在 C/C,Asm,Linker,中添加 CMDDEBUG 宏定义。■ 三:Debug版本需要在Linker添加 --pd"-DCMDDE…

【MySQL数据库 | 第二十四篇】Limit语句的性能问题和调优策略

前言: MySQL作为最流行的关系型数据库管理系统之一,被广泛应用于各种规模和类型的应用程序中。其强大的功能和灵活的查询语言使得开发人员能够高效地执行各种数据操作和分析。 然而,在处理大量数据或复杂查询时,一些开发人员可能…

Linux网卡:连接虚拟与现实的桥梁

在介绍Linux网卡之前,让我们先迈入时光机🕰️,回到1980年代末期,互联网正在逐步从一个科研网络向公众网络转变,Linux——一个自由和开源的操作系统诞生了🐧。Linux的出现,对于计算机科学领域来说…

非线性滤波相位解缠算法

相位解缠是InSAR数据处理流程中较为关键的步骤,同时也是地表高程模型重建 过程中的主要误差来源之一。迄今为止,针对干涉图的相位解缠问题,已经提出了各 种各样的相位解缠算法,这些算法大致可以分为以下几类:①路径跟踪…

DSP笔记13-时间基准子模块Time base(TB)比较子模块Counter cpmpare(CC)

时间基准子模块Time base(TB) 同步,计数 CTR计数寄存器 PRD周期寄存器 CMP比较寄存器,占空比 EPWMA, EPWMB,两个比较寄存器,但只有以及计数寄存器以及一个周期寄存器 计数模式 计数时钟TBCLK HSPCLKDIVx x0,分…

《QT实用小工具·二十三》 Ntp校时类

1、概述 源码放在文章末尾 该项目实现了 Ntp校时类 ,包含如下功能: 可设置Ntp服务器IP地址。 推荐用默认的阿里云时间服务器 ntp1.aliyun.com 收到时间信号发出。 时间精确到秒。 下面是demo演示: 项目部分代码如下: #if…

在线视频下载工具lux(原annie)安装及使用教程

安装教程 下载ffmpeg,参考这篇文章:Python——Windows下载ffmpeg由于博主的系统为windows,所以选择不安装lux,直接下载.exe文件,进入lux的github网站后,选择右侧的Releases,下载下图的windows …

SpringBoot删除菜品模块开发(SpringMVC分割参数、事务管理、异常处理、批量删除)

需求分析与设计 一:产品原型 在菜品列表页面,每个菜品后面对应的操作分别为修改、删除、停售,可通过删除功能完成对菜品及相关的数据进行删除。 删除菜品原型: 业务规则: 可以一次删除一个菜品,也可以批…

【proteus仿真】定时器0中断实验

#include <REGX51.H> sbit LED1P2^0; void delay(unsigned int ten_s) {while(ten_s--); } void inittime0(void) {TMOD0x01;//选择为定时器0模式&#xff0c;工作方式1TH00xFC;//初值65536-100064536FC18H,定时1msTL00x18;ET01;//打开定时器0中断允许EA1;//打开总中断TR…

InternLM2 技术报告——社区翻译版

InternLM2技术报告于近日正式对外发布&#xff0c;不少社区大佬自发地参与到报告的翻译与解读中来。本文为社区用户翻译的InternLM2技术报告原文&#xff0c;分享给大家~ 论文地址&#xff1a; https://arxiv.org/pdf/2403.17297.pdf 摘要 大型语言模型&#xff08;LLMs&…

Java基础常见面试总结

文章目录 1. 变量、数据类型转换、运算符1.1 变量1.2 数据类型转换1.2.1强转的注意事项 1.3 进制的转换1.4 位运算符1.5 运算符1.6 三元运算符 2. 流程控制2.1 键盘录入_Scanner2.2 Random随机数2.3 switch(选择语句)2.4 分支语句2.5 循环语句 3. 数组3.1 数组的定义3.2 数组操…