Git学习笔记:版本回滚
文章目录
- 回到过去:开启新时间线,时间分叉路口
- 1. 回溯开发
- 2. 临时恢复特性
- 3. 实验性开发
- 4. 分支维护和发布
- 5. 调试历史问题
- 类比推理:
- 方法:
- 1. 临时查看旧版本
- 2. 永久回滚到旧版本
- 3. 创建新的分支指向旧版本
回到过去:开启新时间线,时间分叉路口
创建新的分支指向旧版本的操作通常在以下几种情况下会用到:
1. 回溯开发
如果你在当前分支上进行了一些开发工作,但后来发现需要基于一个较早的提交修复问题或重新实现某个功能,而又不想影响当前正在进行的工作。这时可以基于旧版本创建一个新的分支,在新分支上解决问题后再合并回主干。
2. 临时恢复特性
有时候,你可能已经删除或修改了一个功能,但用户要求临时恢复这个旧版本的功能以满足紧急需求,同时不影响现有开发进度。此时,基于包含该功能的旧版本创建分支,并提供给用户使用。
3. 实验性开发
开发者可能想基于过去某个稳定的版本进行实验性的开发或者重构,为了不影响主分支的稳定性,会选择创建一个基于旧版本的新分支进行尝试。
4. 分支维护和发布
在软件开发中,可能会有多个并行的版本线,比如维护老版本的同时开发新版本。当需要为旧版本发布补丁时,可以通过创建一个指向旧版本的分支来进行修复和更新。
5. 调试历史问题
当遇到难以定位的问题并且怀疑是最近的更改引入的 bug 时,可以基于过去的某个稳定版本创建分支来重现问题、分析原因以及测试解决方案。
总之,通过基于旧版本创建新分支的方式,可以避免直接修改现有分支的历史记录,从而保证了对现有开发工作的安全性和可追溯性。
类比推理:
- 在过去犯下的错误,回到过去弥补,不要影响当下。因为即使回到过去执行的任务失败,对现在的时间线也不会有任何影响,这就是为什么要开启传送门回到过去执行一些任务。是为了保护现在。对应5
- 当过去的人发来消息,说要对过去的时间线进行维护时,需要开启传送门。对应4
- 多样性,如果在当下不知道一些做法会产生什么影响时,可以开启传送门,到过去创建n条故事线,以并行展开多项研究,从而判断出哪些是有价值的研究,对于有价值的研究可以应用到现在。指导自己今后的发展方向。用到了任务外包机制。有外包公司在过去的时间线进行多项尝试。对应3
- 复活机制:当现在的时局,一些人已经死亡,而我们想要用到这些亡人的能力,就需要回到过去,找到他们并借用他们的能力。这些能力可能是暂时使用,应急的。因为,之所以他们会判死刑,一定是对当下和未来有合理的考虑,不排除会有失误,所以这个机制正是用来弥补,当下和未来可能会犯下的错误。对应2
- 场景重现:当下一些环境已经改变,无法满足一些技能的启动条件时,可以开启传送门,调用当时的环境来触发这个技能。对应1
归根结底:一切需要回滚的需求,都是为了保护当下。因为当下的稳定,意味着未来的确定。
方法:
在 Git 中回滚版本(即撤销到某个历史提交)可以使用以下几种方法:
1. 临时查看旧版本
如果只是想查看或测试某个旧版本,但不希望永久性地更改当前工作区的状态,可以使用 git checkout
命令加上具体的提交哈希值(SHA-1)。
git checkout <commit-hash>
这将使你的工作目录和暂存区与指定的提交保持一致,但不会改变HEAD指针的位置。一旦你完成了查看或测试,你可以切换回原来的分支,这会恢复到该分支的最新状态。
2. 永久回滚到旧版本
要永久性地回滚到一个特定的历史提交,并且抛弃之后的所有提交,可以使用以下步骤:
-
确保你没有未提交的更改(如果有,先用
git stash
或git commit
处理)。 -
使用
git reset --hard
命令回退到指定提交。git reset --hard <commit-hash>
注意:
--hard
参数会将 HEAD、索引(index/staging area)以及工作目录都更新到指定的提交状态,这将丢弃所有在该提交后做出的更改。 -
推送这个更改到远程仓库(如果需要)。由于默认情况下 Git 不允许强制推送历史更改,你需要添加
-f
或--force
参数来覆盖远程分支:git push origin <branch-name> -f
警告: 强制推送可能会对其他协作者产生影响,请谨慎操作,并确保团队成员对此变更知情。
3. 创建新的分支指向旧版本
如果不想修改当前分支的历史记录,而是想基于旧版本创建一个新的分支:
git checkout -b new_branch <commit-hash>
这样就会创建并切换到名为 new_branch
的新分支,其内容对应于指定提交的状态。然后你可以在这个新分支上继续开发。
选择哪种方式取决于你的具体需求和场景,务必谨慎对待可能影响到其他团队成员的操作。
相关文章:
Git学习笔记:版本回滚
文章目录 回到过去:开启新时间线,时间分叉路口1. 回溯开发2. 临时恢复特性3. 实验性开发4. 分支维护和发布5. 调试历史问题类比推理: 方法:1. 临时查看旧版本2. 永久回滚到旧版本3. 创建新的分支指向旧版本 回到过去:开…...

OpenCV图像的基本操作
图像的基本操作(Python) 素材图 P1:die.jpg P2:cool.jpg V:rabbit.mp4, 下载地址 读取展示-图像 import cv2img_1 cv2.imread(./die.jpg) # default cv2.IMREAD_COLOR print("die.jpg shape(imre…...

小白水平理解面试经典题目LeetCode 594 Longest Harmonious Subsequence(最大和谐字符串)
594 最大和谐字符串 这道题属于字符串类型题目,解决的办法还是有很多的,暴力算法,二分法,双指针等等。 题目描述 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums …...

Vue-35、Vue中使用ref属性
1、ref属性 2、代码 <template><div id"app"> <!-- <img alt"Vue logo" src"./assets/logo.png">--><h1 v-text"msg" ref"title"></h1><button click"showDOM" ref&…...

网络通信(15)-C#TCP客户端掉线重连实例
本文上接前面的文章使用Socket在C#语言环境下完成TCP客户端的掉线重连实例。 掉线重连需要使用心跳包发送测试网络的状态,进而进入重连循环线程。 前面实例完成的功能: 客户端与服务器连接,实现实时刷新状态。 客户端接收服务器的数据。 客户端发送给服务器的数据。 客…...

React进阶 - 14(说一说”虚拟DOM“中的”Diff算法“)
本章内容 目录 一、了解 Diff 算法二、key 值的重要性三、为什么不建议使用 index 做 key 值 上一节我们初步了解了 React中的”虚拟 DOM“ ,本节我们来说一说”虚拟DOM“中的”Diff算法“ 一、了解 Diff 算法 在上一篇中,我们有讲到:当 st…...

#GPU|LLM|AIGC#集成显卡与独立显卡|显卡在深度学习中的选择与LLM GPU推荐
区别 核心区别:显存,也被称作帧缓存。独立显卡拥有独立显存,而集成显卡通常是没有的,需要占用部分主内存来达到缓存的目的 集成显卡: 是集成在主板上的,与主处理器共享系统内存。 一般会在很多轻便薄型的…...

HCIP-IPV6实验
实验拓扑 实验需求 全网可达 实验思路 配置IP地址 配置路由协议-ospf 配置R2 配置IPV6 配置R2Tunnel 将所有地址引流到Tunnel0/0/0接口 ripng配置 汇总 实验步骤 配置IP地址 以R2为例 [Huawei]sys r2 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip address 12.1.1…...

如何训练和导出模型
介绍如何通过DI-engine使用DQN算法训练强化学习模型 一、什么是DQN算法 DQN算法,全称为Deep Q-Network算法,是一种结合了Q学习(一种价值基础的强化学习算法)和深度学习的算法。该算法是由DeepMind团队在2013年提出的,…...

Springboot注解@Aspect(一)之@Aspect 作用和Aop关系详解
目录 Aspect的使用 配置 作用 通知相关的注解 例子 结果: Aspect作用和Spring Aop关系 示例 标签表达式 Aspect的使用 配置 要启用 Spring AOP 和 Aspect 注解,需要在 Spring 配置中启用 AspectJ 自动代理,但是在 Spring Boot 中&a…...

自动化防DDoS脚本
简介 DDoS (分布式拒绝服务攻击)是一种恶意的网络攻击,旨在通过占用目标系统的资源,使其无法提供正常的服务。在DDoS攻击中,攻击者通常控制大量的被感染的计算机或其他网络设备,同时将它们协调起来向目标系…...
ubuntu怎么查看有几个用户
在Ubuntu中,可以使用以下命令来查看系统中的用户数量: cat /etc/passwd | wc -l这个命令会读取 /etc/passwd 文件中的用户信息,并使用 wc -l 命令来计算行数,即用户数量。 另外,你也可以使用以下命令来查看当前登录到…...

Linux | makefile简单教程 | Makefile的工作原理
前言 在学习完了Linux的基本操作之后,我们知道在linux中编写代码,编译代码都是要手动gcc命令,来执行这串代码的。 但是我们难道在以后运行代码的时候,难道都要自己敲gcc命令嘛?这是不是有点太烦了? 在vs中…...

pcl+vtk(十四)vtkCamera相机简单介绍
一、vtkCamera相机 人眼相当于三维场景下的相机, VTK是用vtkCamera类来表示三维渲染场景中的相机。vtkCamera负责把三维场景投影到二维平面,如屏幕、图像等。 相机位置:即相机所在的位置,用方法vtkCamera::SetPosition()设置。 相…...

TS基础知识点快速回顾(上)
基础介绍 什么是 TypeScript? TypeScript,简称 ts,是微软开发的一种静态的编程语言,它是 JavaScript 的超集。 那么它有什么特别之处呢? js 有的 ts 都有,所有js 代码都可以在 ts 里面运行。ts 支持类型支持&#…...
hook(post-receive)无法使用
hook(post-receive)无法使用 为什么无法使用? 只有一个问题:权限不够,你想想,blog.git是一个中转站,咱们要把上传的东西转到blog下面,肯定要有写入操作呀,这个Git仓库的…...

qt学习:tcp区分保存多个客户端
在前面文掌的tcp客服端服务端进行更改 qt学习:Network网络类tcp客户端tcp服务端-CSDN博客https://blog.csdn.net/weixin_59669309/article/details/135842933?spm1001.2014.3001.5501前面的服务端每次有新的客户端连接,就会覆盖掉原来的指针࿰…...

ORM-08-EclipseLink 入门介绍
拓展阅读 The jdbc pool for java.(java 手写 jdbc 数据库连接池实现) The simple mybatis.(手写简易版 mybatis) 1. EclipseLink概述 本章介绍了EclipseLink及其关键特性:包括在EclipseLink中的组件、元数据、应用程序架构、映射和API。 本…...

数据结构之树和二叉树定义
数据结构之树和二叉树定义 1、树的定义2、树的基本概念3、二叉树的定义 数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以…...

大模型学习与实践笔记(十三)
将训练好的模型权重上传到 OpenXLab 方式1: 先将Adapter 模型权重通过scp 传到本地,然后网页上传 步骤1. scp 到本地 命令为: scp -o StrictHostKeyCheckingno -r -P *** rootssh.intern-ai.org.cn:/root/data/ e/opencv/ 步骤2&#…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...