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

git使用“保姆级”教程4——版本回退及分支讲解

一、版本回退

1、历史回退(版本回退)——命令行git reset --hard 版本编号

  • 注意:当前命令会让工作区的内容发生改变,可以理解成历史区(master分支)直接回到工作区
  • 比如:从版本4回到版本3,则工作区只会显示版本3的代码内容

1.1、指令解释

// 回退到上一次提交的版本 => 在Head(当前指针指向的位置)后添加一个^$ git reset --hard HEAD^// 回退到上上次提交的版本 => 在Head后添加两个^,依此类推$ git reset --hard HEAD^^// 这里的~2 等于 ^^写法,比较简洁 $ git reset --hard HEAD~2 // 后面还可以接"标识符"回到任意版本 => "标识符"来自提交版本时,生成的编号的前6位,可以通过`git log`查看$ git reset --hard 7016321 

1.2、图示说明

在这里插入图片描述
也就是:随着提交版本的增多,head会指向到最近一次记录

1.3、业务带入

  1. 创建4次提交版本记录——此时HEAD指针指向第4次的版本记录
    在这里插入图片描述
  2. 回退到第三次的版本记录
    在这里插入图片描述在这里插入图片描述
  3. 查看版本记录
    在这里插入图片描述

2、查看本地库所有的操作记录——命令行git reflog

  1. 查看所有的本地库操作记录
    在这里插入图片描述
  2. 找到对应版本号标识符
    在这里插入图片描述
  3. 回退到想回退的版本记录——从版本3回到版本4
    在这里插入图片描述
  4. 查看工作台
    在这里插入图片描述

3、历史回退(不修改工作区内容)——命令行git reset --soft

  • 注意:当前命令不会让工作区的内容消失,可以理解成版本回退到暂存区
  • 比如:从版本5回到版本3,工作区的代码不会消失
  • 作用
    • 版本注释写错时,可以选择这种回退方式,让代码放在暂存区后,再次重新提交到历史区,此时,可以重新补充版本注释内容
    • 当版本提交后,发现有bug需要修复时,可以通过这种方式,将提交后的代码撤回到暂存区,等修复bug后,再次将代码提交到暂存区,此时,之前退回来的代码会和这次修复后的代码进行合并,最后,将两份合并后的代码再一起提交到历史区,这样提交记录会很清晰
      • 注意:如果此时有,第二个页面功能已经开始写了,需要先提交当前需要修复的内容,不要再用全部上传了!
  1. 回退一个版本——从版本5回到版本3
    在这里插入图片描述
  2. 查看工作区 ——代码还在,可以理解回退到暂存区
    在这里插入图片描述
  3. 查看版本记录 ——记录已经没了
    在这里插入图片描述

4、git revert与git reset的区别

4.1、图解

在这里插入图片描述

4.2、注意

// 1、注意:这里可以不加 --hard $ git revert HEAD
// 2、注意:和reset不同,revert这里的HEAD和reset差了一个版本,也就是:revert HEAD是回到上一个版本,revert HEAD^是回到上上个版本

4.3、业务带入

  1. 输入命令行回退到上个版本
    在这里插入图片描述
  2. 进入当前页面,输入i进行注释编辑,再输入esc退出,最后输入:wq回车
    在这里插入图片描述
  3. 查看版本记录——新增了一条记录信息
    在这里插入图片描述
  4. 查看工作区变化——代码内容已经回退成功了
    在这里插入图片描述

4.4、对比解释

  1. git reset
    • 回滚到对应的commit-id(提交记录)
    • 相当于是:删除了commit-id以后的所有的提交,并且不会产生新的commit-id记录
    • 如果要推送到远程服务器的话,reset这种回退方式会比较危险,因为需要强制推送-f,有可能覆盖团队内别人的代码,此时,比较建议使用git reset --soft这种回退方式再次提交
  2. git revert
    • 用来撤销某个特定提交的更改,但它不会直接修改或删除之前的提交记录。
    • 它会新建一个提交,把之前那个提交的改动“反向操作”一下
      • 比如:如果之前的提交是添加了某些代码,revert会新建一个提交来删除这些代码
    • 如果要推送到远程服务器的话,就是普通的操作git push就好了

二、版本回退

1、初识分支

  1. 解释
    • git分支就是:我们把整个文件夹分成一个个独立的区域,比如:
      • 在开发登录功能时,可以放在login分支下进行开发;
      • 开发列表功能时,可以放在list分支下进行开发;
      • 大家互不干扰,每个功能都是一个独立的功能分支,开发完成后,再合并到主分支中,分支没有用的时候,也可以删掉,这样开发就会好很多
    • git在初始化时,会自动生成master主分支,同时,我们也可以自己开辟出独立分支
  2. 作用
    • 在应对团队协作中,测试功能时不阻塞其它功能的开发进程
    • 单兵作战中,方便修复bug,不影响其它功能的正常开发
  3. 解释
    在这里插入图片描述
    在这里插入图片描述

2、创建分支

  1. 创建分支使用——git branch 分支名称指令
    在这里插入图片描述
  2. 查看当前分支情况——git branch指令
    • 可以看到,当前有两个分支:一个是master,一个是list
    • 前面带有* 号,且有高亮显示的分支,表示:当前所处的分支
      在这里插入图片描述

3、切换分支

  1. 解释
    • 对列表功能的开发要移动到list分支去完成,所以需要使用git checkout 分支名称进行切换
    • 注意:切换分支之前,一定要将当前分支的内容提交!否则在别的分支上会出现当前分支代码,这不对!
  2. 命令行:
// 切换到 list 分支$ git checkout list
  1. 后续
    • 后续在该分支上进行列表功能的开发,开发完成后,在当前分支上进行提交,提交后我们再进行分支切换
    • 发现master上还是最初始的状态,而list分支上有我们新写的列表功能的代码,此时按照分支把所有功能都开发完毕后,把所有代码都合并到master主分支上就可以了
  2. 图示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4、合并分支

  1. 解释
    • git中的合并分支,只能是:把别的分支内容合并到自己的分支上
    • 使用的指令是:git merge
// 切换到 master 分支$ git checkout master// 把 list 的内容合并到自己的分支$ git merge list
  1. 后续
    • 这时,刚才在list分支上开发的内容,就都来到了master主分支上
    • 如果有多个分支的话,那么所有的最后分支都合并到master分支上时,我们的主分支上就有完整网站的所有页面,各个分支上都是单独的页面和功能
  2. 图解
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

5、删除分支

  1. 解释: 此时开辟的list分支就没有什么用了,也就可以删除分支
  2. 步骤及命令行
    • 先切换到别的分支
    • 使用指令git branch -d 分支名称进行删除
// 先切换到别的分支$ git checkout master// 删除 list 分支 => -d的意思是delete的缩写$ git branch -d list
  1. 图解
    在这里插入图片描述

相关文章:

git使用“保姆级”教程4——版本回退及分支讲解

一、版本回退 1、历史回退(版本回退)——命令行git reset --hard 版本编号 注意:当前命令会让工作区的内容发生改变,可以理解成历史区(master分支)直接回到工作区比如:从版本4回到版本3,则工作区只会显示版本3的代码内容 1.1、指…...

spring cache,Spring data redis

本项目使用Redis存储缓存数据,如何通过Java去访问Redis? 常用的有Jedis和Lettuce两个访问redis的客户端类库 ,Jedis和Lettuce都是redis提供的。其中Lettuce的性能和并发性要好一些,Spring Boot 默认使用的是 Lettuce 作为 Redis …...

10.数据结构与算法-线性表的应用(线性表与有序表的合并)

线性表的合并 有序表的合并 顺序表 链表...

GAN|对抗| 生成器更新|判别器更新过程

如上图所示,生成对抗网络存在上述内容: 真实数据集;生成器;生成器损失函数;判别器;判别器损失函数;生成器、判别器更新(生成器和判别器就是小偷和警察的关系,他们共用的…...

day01——登录功能

逻辑: 前端将登录信息通过报文的形式,发送给后端。后端进行登陆验证 2.1 根据接受的用户名,查询数据表。 若不存在该用户的记录,返回用户不存在。 若用户存在,判断数据库中的密码和接收的是否一致,不一致则…...

Flutter中使用FFI的方式链接C/C++的so库(harmonyos)

Flutter中使用FFI的方式链接C/C库(harmonyos) FFI plugin创建和so的配置FFI插件对so库的使用 FFI plugin创建和so的配置 首先我们可以根据下面的链接生成FFI plugin插件:开发FFI plugin插件 然后在主项目中pubspec.yaml 添加插件的依赖路径&…...

【C++】二义性

在C中,二义性(ambiguity)通常指的是编译器无法确定使用哪个函数、变量或类成员的情况。这种不确定性通常是由于继承和多态特性导致的。下面是一些常见的产生二义性的场景以及如何解决它们的方法: 1. 多重继承中的二义性 当一个类…...

高并发内存池(五):ThreadCache、CentralCache和PageCache的内存回收机制、阶段性代码展示和释放内存过程的调试

目录 ThreadCache的内存回收机制 补充内容1 补充内容2 补充内容3 补充内容4 ListTooLong函数的实现 CentralCache的内存回收机制 MapObjectToSpan函数的实现 ReleaseListToSpans函数的实现 PageCache的内存回收机制 补充内容1 补充内容2 ReleaseSpanToPageCache函…...

STL之stackqueue篇(上)探索C++ STL中的Queue与Stack——构建数据处理的基础框架

文章目录 前言一、stack1.1 定义与基本概念1.2 底层容器1.3 成员函数1.4 使用示例1.5 注意事项1.6 应用场景 二、queue2.1 定义与基本概念2.2 底层容器2.3 成员函数2.4 使用示例2.5 注意事项2.6 应用场景 前言 本文旨在深入探讨C STL中的queue与stack容器,从它们的…...

代码随想录算法训练营Day13

110.平衡二叉树 力扣题目链接:. - 力扣(LeetCode) 后序迭代 class Solution {public boolean isBalanced(TreeNode root) {return getHeight(root)!-1;}public int getHeight(TreeNode root){if(rootnull){return 0;}int leftheightgetHei…...

基于STM32的智能门禁系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 RFID数据采集与处理门禁控制实现显示与报警功能应用场景结论 1. 引言 智能门禁系统在现代安防中占据重要地位,通常用于控制进入和离开特定区域的权限。通过基于STM32微控制器…...

[EBPF] 实时捕获DM数据库是否存在SQL阻塞

1. 介绍 eBPF(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网…...

秋招内推--招联金融2025

【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…...

Unity2022.3.x各个版本bug集合及推荐稳定版本

最近升级到Unity2022,发现以下问题,仅作参考 2022.3.0f1 - 2022.3.6f1 粒子渲染到RenderTexture闪屏 https://issuetracker.unity3d.com/issues/android-vulkan-visualisation-corruption-occurs-when-rendering-particles-to-render-texture 2022.3.…...

SparkSQL-性能调优

祝福 在这个举国同庆的时刻,我们首先献上对祖国的祝福: 第一,我们感谢您给我们和平的环境,让我们能快乐生活 第二,祝福我们国家未来的路越走越宽广,科技更发达,人民更幸福 第三,…...

leetcode-链表篇

leetcode-707 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需要属性 prev 以指示链表中的…...

JetLinks物联网平台微服务化系列文章介绍

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、AI知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&#x…...

【QT Quick】基础语法:导入外部QML文件

在实际项目中,代码通常分为多个文件进行模块化管理,这样可以方便代码重用,例如统一风格或共享功能模块。我们将在此部分学习如何创建 QML 项目,并演示如何访问外部代码,包括其他 QML 文件、库文件以及 JS 代码。 准备…...

Llama 系列简介与 Llama3 预训练模型推理

1. Llama 系列简介 1.1 Llama1 由 Meta AI 发布,包含 7B、13B、33B 和 65B 四种参数规模的开源基座语言模型 数据集:模型训练数据集使用的都是开源的数据集,总共 1.4T token 模型结构:原始的 Transformer 由编码器&#xff08…...

【AIGC】ChatGPT提示词助力自媒体内容创作升级

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯高效仿写专家级文章提示词使用方法 💯CSDN博主账号分析提示词使用方法 💯自媒体爆款文案优化助手提示词使用方法 💯小结 &#x1f4af…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...