【Linux】:Linux中的Git分支管理

在这里插入图片描述
在这里插入图片描述
本章开始介绍 Git 的杀⼿级功能之⼀(注意是之⼀,也就是后⾯还有之⼆,之三……):分⽀。分⽀就是科幻电影⾥⾯的平⾏宇宙,当你正在电脑前努⼒学习 C++ 的时候,另⼀个你正在另⼀个平⾏宇宙⾥努⼒学习 JAVA
如果两个平⾏宇宙互不⼲扰,那对现在的你也没啥影响。不过,在某个时间点,两个平⾏宇宙合并了,结果,你既学会了 C++ ⼜学会了 JAVA!
在这里插入图片描述
在版本回退⾥,你已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即master分⽀。再来理解⼀下HEAD,HEAD严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD指向的就是当前分⽀
在这里插入图片描述
每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越来越⻓,⽽HEAD只要⼀直指向master分⽀即可指向当前分⽀
通过查看当前的版本库,我们也能清晰的理出思路

@139-159-150-152:~/gitcode$ cat .git/HEAD
ref: refs/heads/master
@139-159-150-152:~/gitcode$ cat .git/refs/heads/master
5476bdeb12510f7cd72ac4766db7988925ebd302

创建分⽀

Git⽀持我们查看或创建其他分⽀,在这⾥我们来创建第⼀个⾃⼰的分⽀dev ,对应的命令为:

@139-159-150-152:~/gitcode$ git branch #查看当前本地所有分⽀
* master
@139-159-150-152:~/gitcode$ git branch dev #新建分⽀dev
@139-159-150-152:~/gitcode$ git branch
dev
* master

当我们创建新的分⽀后,Git新建了⼀个指针叫dev, * 表⽰当前 HEAD指向的分⽀是 master 分⽀。另外,可以通过⽬录结构发现,新的 dev 分⽀

@139-159-150-152:~/gitcode$ ls .git/refs/heads/
dev master
@139-159-150-152:~/gitcode$ cat .git/refs/heads/*
5476bdeb12510f7cd72ac4766db7988925ebd302
5476bdeb12510f7cd72ac4766db7988925ebd302

发现⽬前dev和master指向同⼀个修改。并且也可以验证下HEAD⽬前是指向 master 的

@139-159-150-152:~/gitcode$ cat .git/HEAD
ref: refs/heads/master

在这里插入图片描述

切换分⽀

那如何切换到dev分⽀下进⾏开发呢?使⽤ git checkout 命令即可完成切换,⽰例如下:

@139-159-150-152:~/gitcode$ git checkout dev
Switched to branch 'dev'
@139-159-150-152:~/gitcode$ git branch
* dev
master
@139-159-150-152:~/gitcode$ cat .git/HEAD
ref: refs/heads/dev

在这里插入图片描述
我们发现HEAD已经指向了dev,就表⽰我们已经成功的切换到了dev上
接下来,在 dev 分⽀下修改ReadMe⽂件,新增⼀⾏内容,并进⾏⼀次提交操作

@139-159-150-152:~/gitcode$ vim ReadMe
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3
write aaa for new branch
@139-159-150-152:~/gitcode$ git add .
@139-159-150-152:~/gitcode$ git commit -m"modify ReadMe"
[dev 3740dce] modify ReadMe
1 file changed, 1 insertion(+)

现在,dev分⽀的⼯作完成,我们就可以切换回master分⽀:

@139-159-150-152:~/gitcode$ git checkout master
Switched to branch 'master'
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3

切换回master分⽀后,发现ReadMe⽂件中新增的内容不⻅了!!!赶紧再切回dev看看:

@139-159-150-152:~/gitcode$ git checkout dev
Switched to branch 'dev'
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3
write aaa for new branch

在dev分⽀上,内容还在。为什么会出现这个现象呢?我们来看看dev分⽀和master分⽀指向,发现两者指向的提交是不⼀样的

@139-159-150-152:~/gitcode$ cat .git/refs/heads/dev
bdaf528ffbb8e05aee34d37685408f0e315e31a4
@139-159-150-152:~/gitcode$ cat .git/refs/heads/master
5476bdeb12510f7cd72ac4766db7988925ebd302

看到这⾥就能明⽩了,因为我们是在dev分⽀上提交的,⽽master分⽀此刻的提交点并没有变,此时的状态如图如下所⽰
在这里插入图片描述
当切换到master分⽀之时,HEAD就指向了master,当然看不到提交了!

合并分⽀

为了在master主分⽀上能看到新的提交,就需要将 dev 分⽀合并到 master 分⽀,⽰例如下

@139-159-150-152:~/gitcode$ git branch
* dev
master
@139-159-150-152:~/gitcode$ git checkout master # 切换到 master 上进⾏合并
Switched to branch 'master'
@139-159-150-152:~/gitcode$ git merge dev # 合并 dev 分⽀
Updating 16623e1..3740dce
Fast-forward
ReadMe | 1 +
1 file changed, 1 insertion(+)
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3
write aaa for new branch

git merge 命令⽤于合并指定分⽀到当前分⽀ 合并后,master就能看到dev分⽀提交的内容了 此时的状态如图如下所⽰
在这里插入图片描述
Fast-forward代表“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度⾮常快当然,也不是每次合并都能Fast-forward,我们后⾯会讲其他⽅式的合并

删除分⽀

合并完成后,dev分⽀对于我们来说就没⽤了,那么dev分⽀就可以被删除掉,注意如果当前正处于某分⽀下,就不能删除当前分⽀,如:

@139-159-150-152:~/gitcode$ git branch
* dev
master
@139-159-150-152:~/gitcode$ git branch -d dev
error: Cannot delete branch 'dev' checked out at '/home/hyb/gitcode'

⽽可以在其他分⽀下删除当前分⽀,如:

@139-159-150-152:~/gitcode$ git checkout master
Switched to branch 'master'
@139-159-150-152:~/gitcode$ git branch -d dev
Deleted branch dev (was bdaf528).
@139-159-150-152:~/gitcode$ git branch
* master
1 2 3 4 5 6 7

此时的状态如图如下所⽰
在这里插入图片描述
因为创建、合并和删除分⽀⾮常快,所以Git⿎励你使⽤分⽀完成某个任务,合并后再删掉分⽀,这和直接在master分⽀上⼯作效果是⼀样的,但过程更安全
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

day15 层序遍历 翻转二叉树 对称二叉树

题目1:102 二叉树的层序遍历 题目链接:102 二叉树的层序遍历 题意 根据二叉树的根节点root,返回其节点值的层序遍历 借助队列实现,因为队列是先进先出的逻辑,符合层序遍历一层一层遍历的思想 代码 /*** Definitio…

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载)

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载) 什么是自然语言处理 (NLP) ? 自然语言处理 (NLP) 是计算机科学的一个分支,更具体地说,是人工智能 (AI) 的分支,旨在让计算机能够以与人类大致相同的方式理解文本和语音。 自然语…

开发代码基础

首先安装驱动,在ARDUINO环境下安装,然后安装开发板,详见哔哩哔哩教程 1:接入点模式(也称 AP) 通过以下示例程序,NodeMCU将会建立一个名为taichi-maker的WiFI。您可以使用手机或电脑连接该WiFi…

【论文阅读】Self-supervised Learning: Generative or Contrastive

Abstract 研究了在计算机视觉、自然语言处理和图形学习中用于表示的新的自监督学习方法。全面回顾了现有的实证方法,并根据其目的将其归纳为三大类:生成性、对比性和生成性对比(对抗性)。进一步收集了关于自我监督学习的相关理论…

Java浮点数精度问题与BigDecimal详解

第1章:引言 大家好,我是小黑,咱们在日常的Java编程中,经常会遇到处理金融数据的情况,比如计算商品的价格或者处理用户的账户余额。在这些场景下,精确的数值计算就显得尤为重要。这时候,BigDeci…

【SPDK】【NoF】使用SPDK实现NVMe over Fabrics Target

本文使用两台PC,一台做NVMe over Fabrics Target(服务端),一台做NVMe over Fabrics initiator(客户端)。首先使用SoftRoCE来实现底层的rdma传输,然后使用SPDK来实现NVMe over Fabrics Target。 …

内存卡为什么会提示格式化,内存卡提示格式化还能恢复吗

对于许多电脑用户来说,执行内存卡格式化操作导致数据丢失是一个常见的问题。在日常生活中,数据丢失的情况并不少见,但内存卡格式化后的数据恢复相对较难。目前,能够使用的方法较少,且成功率较低,但并不是没…

全网快递查询工具:批量查询,提升工作效率的利器

在快递行业日新月异的今天,高效、准确的快递信息管理显得尤为重要。固乔快递查询助手正是一款专为快递网点设计的实用工具,它可以帮助您快速、批量查询全网快递单号,为您的网点运营带来诸多便利。 一、固乔快递查询助手的用途 批量查询&…

java: 5-3 for循环

文章目录 1. for1.1 基本语法1.2 练习1.3 执行流程1.4 细节1.5 编程思想 (练习) 【老韩b站视频笔记p121-p125】 1. for 让你的代码可以循环执行。 1.1 基本语法 for 关键字,表示循环控制。for 有四要素: (1)循环的初始变量。 (2)循环的条件(变量条件&…

代码随想录算法训练营第25天 | 216.组合总和III 17.电话号码的字母组合

目录 216.组合总和III 💡解题思路 回溯三部曲 💻实现代码 17.电话号码的字母组合 💡解题思路 # 数字和字母如何映射 # 回溯法来解决n个for循环的问题 💻实现代码 216.组合总和III 题目链接:216.组合总和III …

百家大吉·夕阳关爱——昌岗街微型养老博览会

居民热情参与博览会 为让长者了解及选择适合自己的养老服务,昌岗街在2023年12月27日开展以“百家大吉夕阳关爱”为主题的昌岗街微型养老服务公益博览会活动,通过搭建养老服务机构供需服务平台,拓宽社区长者了解正规养老服务机构的渠道&#…

仿真验证方法(1)——动态验证

一、概述 1.1 验证的目的和方法 在现代集成电路设计中,验证所占工作量超过70%。验证要求真实而完备,它决定了设计的成败与成本。 验证的目的 原始描述是否正确?(代码) 逻辑功能是否正确?(功能…

OpenGl 19高级GLSL

一.GLSL的内建变量 在着色器中,需要当前着色器以外地方的数据的话,必须把数据传进来。之前我们是通过uniform类型和采样器来完成的。之外,GLSL还支持另外几个以gl为前缀的变量,提供更多读写数据的方式,比如说顶点着色…

C语言操作符详解与进制

目录 一:操作符的分类 二:二进制和进制转换 2.1 2进制转10进制 2.1.1 10进制转2进制数字 2.2 2进制转8进制和16进制 2.2.1 2进制转8进制 2.2.2 2进制转16进制 三: 原码、反码、补码 四:移位操作符 4.1左移操作符 4.2 右…

C语言指针(一)

目录 1.什么是指针 2.指针变量和地址 1.解引用操作符 2.指针变量类型的意义 3.void*指针 4.const修饰指针 1.const放在*左边 2.const放在*右边 3.指针的运算 1.指针加减整数 2.指针减指针 3.指针比较大小 4.野指针 1.没有给指针变量初始化 2.指针指向的空间释放 …

XSS的利用(包含:蓝莲花、beef-xss)

0x00、环境搭建 dvwa靶场 操作指南和最佳实践:使用 DVWA 了解如何防止网站漏洞_dvwa源代码-CSDN博客 xss漏洞接收平台 下载:GitHub - firesunCN/BlueLotus_XSSReceiver 将解压后的BlueLotus_XSSReceiver原代码放置 phpstudy 安装目录的WWW文件夹下 访问平台:http://127…

力扣刷题记录(28)LeetCode:797、200、463

797. 所有可能的路径 解题思路&#xff1a;回溯算法&#xff0c;当收集到的路径的最后一个值等于n-1时&#xff0c;收集答案。 参数&#xff1a;图、当前结点 class Solution { public:vector<int> path;vector<vector<int>> ans;void dfs(vector<vector…

企业培训系统源码:构建智能、可扩展的学习平台

企业培训系统在现代企业中扮演着至关重要的角色。本文将通过深度解析企业培训系统的源码&#xff0c;介绍如何构建一个智能、可扩展的学习平台&#xff0c;涉及关键技术和代码实例。 1. 技术栈选择与项目初始化 在构建企业培训系统之前&#xff0c;选择适当的技术栈是至关重…

Linux操作系统----实用工具Git(配实操图)

绪论​ “针对问题 解决问题 针对问题&#xff01;”&#xff0c;本章主要讲解的是Git是什么以及Git的如何搭建仓库和如何在Linux环境下通过指令的形式提交自己的代码到远程仓库。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 1.Git的来源以…

vulnhub靶场之DC-5

一.环境搭建 1.靶场描述 DC-5 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. The plan was for DC-5 to kick it up a notch, so this might not be great for beginners, but should be ok for p…