【Git】回滚旧提交版本且不影响最新提交版本

【Git】回滚旧提交版本且不影响最新提交版本

一、场景假设

远程仓库origin中有一个分支main,有4次提交记录:v1、v2、v3、v4。

二、需求

需要回滚旧提交版本,但不影响已有的所有提交版本(即不影响最新提交版本),以便需要时可以重新回滚到最新提交版本。

如:现在想要回到版本v3,在v3上更新。之后可能回滚到最新版本v4。

三、基本思路

1、基于想要回滚的版本的commit号,创建【新分支】

(1)找到需要回滚的版本的commit号。

  • 方法一:使用git log查找。

    下图所示为v3的提交日志,commit后面的一长串字符即为commit号。

    在这里插入图片描述

  • 方法二(github仓库):在github仓库的commit历史中查找。

    点击下图所示的commits按钮,即可看到该分支下所有历史提交记录。
    在这里插入图片描述
    如下图所示,每条历史提交记录的右侧有一个复制按钮,点击即可复制该提交记录的commit号。
    在这里插入图片描述

(2)基于commit号在本地创建新分支。

使用如下命令:

git branch <new_branch_name> <commit_number>

假设创建新分支的名字是dev,回滚到v3,那么使用的命令就是:git branch dev f10c246f23c90c813813bc989e9feb2e4523ec9(这一长串就是前面找到的v3的commit号)。

注意:

git branch <new_branch_name>

这个命令只在本地创建分支,远程仓库(比如github)上面还不会显示有dev这个分支。

(3)将本地创建的此新分支推送到远程仓库

将本地创建的新分支推送到远程仓库后,远程仓库才会显示此新分支。使用如下命令:

git push <remote> <new_branch_name>

假设需要将新分支dev推送到远程仓库originorigin一般是远程仓库的别名),那么使用的命令就是:git push origin dev

2、切换到【新分支】,如后续有更新,所做的更新都推送到【该分支】

(1)切换到新分支

切换分支默认是切换到该分支的最新版本,即在前面的示例中,切换到分支dev即相当于回滚到了v3版本。

因为前面只是创建了分支,但是并没有跟踪该分支,因此要想在该分支上更新,还需要切换到该分支。

使用如下命令:

git checkout <target_branch_name>

假设要回滚到v3、在v3基础上进行更新,那就切换到以v3为最新版本的分支dev,即使用命令:git checkout dev

(2)如后续有更新,将更新推送到该分支

git add .
git commit -m '<your comment>' 
git push <remote> <target_branch_name> 

第一行命令表示将所有更新过的文件加入到暂存区,以便后续提交;

第二行命令的是对更新内容的备注;

第三行命令的具体示例:按照前面的案例,为git push origin dev

3、当需要回到先前的最新版本时,切换回【拥有该最新版本的分支】,如后续基于最新版本有更新,所做的更新都推送到【该分支】

(1)切换到拥有最新版本的分支

默认切换到该分支的最新commit版本。

git checkout <target_branch_name>

按照前面的案例,为git checkout main

(2)如后续有更新,将更新推送到分支

git add .
git commit -m '<your comment>'
git push <remote> <target_branch_name>

第一行命令表示将所有更新过的文件加入到暂存区,以便后续提交;

第二行命令的是对更新内容的备注;

第三行命令的具体示例:按照前面的案例,为git push origin main

其他情况

假设切换到分支中的非最新版本号,切换版本后会提示“您正处于分离头指针状态”。如果在这非最新版本上进行修改后,直接进行以下命令并不会将更新提交到dev。

git add .
git commit -m '<your comment>' 执行此命令后会看到有此更新的版本号,如:[分离头指针 560e268] revise v2.
git push <your remote> <your branch> 如:git push origin dev

但是更新的内容会有一个版本号。若想保留更新,可以基于此修改新建一个分支。使用命令与步骤1中的相似。具体而言,假设更新内容的版本号是560e268,可以创建新的分支dev2来保存这个版本的修改。即:git branch dev2 560e268。此时本地就会有dev2分支。要想将此本地分支推送到远程还需要进一步执行git push origin dev2

push操作可能会有一些网络问题导致不成功,多试几次就好。

四、一些基本命令

  • 查看本地有哪些分支

    git branch
    
  • 查看远程仓库有哪些分支

    git branch -r
    
  • 在本地新建分支(此时远程还没有)

    git branch <new_branch_name>
    

    如:git branch dev

  • 将在本地新建的分支推送到远程

    git push origin <new_branch_name>
    

    如:git push origin dev

  • 切换分支

    git checkout <branch_name>
    

    注:git checkout主要用于切换历史版本、切换分支。

    如:git checkout dev

    一般默认是切换到分支中的最新提交版本。

  • 在本地基于某版本创建分支并切换到该分支

    git checkout -b <new_branch_name> <commit_number>
    

    相当于合并了:git branch <new_branch_name>git checkout <new_branch_name>

  • 切换版本号

    git checkout <commit_number>
    

    这里应该是本分支下的版本号才可以进行切换。

  • 删除本地分支

    git branch -d <branch_name>
    

    注意:删除的分支不能是当前所处的分支。

  • 删除远程分支

    删除远程分支之前要先删除本地分支。

    git push origin --delete <branch_name>
    
    这里应该是本分支下的版本号才可以进行切换。
    
  • 删除本地分支

    git branch -d <branch_name>
    

    注意:删除的分支不能是当前所处的分支。

  • 删除远程分支

    删除远程分支之前要先删除本地分支。

    git push origin --delete <branch_name>
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

树和二叉树:二叉树的基本运算算法的实现

一.前言 当前版本仅供笔者复盘 二.二叉树 2.1题目 编写一个程序&#xff0c;实现二叉树的基本运算&#xff0c;具体要求如下&#xff1a;&#xff08;指定示范实例1&#xff1a;图1。指定示范实例2&#xff1a;图2 &#xff09; 1&#xff0c;先序遍历输出该树&#xff08…

PWM 开发舵机SG90-硬件舵机实战

1.PWM&#xff0c;英文名Pulse Width Modulation&#xff0c;是脉冲宽度调制缩写&#xff0c;它是通过对一系列脉冲的宽度进行调制&#xff0c;等效出所需要的波形&#xff08;包含形状以及幅值&#xff09;&#xff0c;对模拟信号电平进行数字编码&#xff0c;也就是说通过调节…

hadoop学习---基于Hive的数仓搭建增量信息拉链表的实现

拉链表就是SCD2&#xff0c;它的优点是即满足了反应数据的历史状态&#xff0c;又能在最大程度上节省存储。 拉链表的实现需要在原始字段基础上增加两个新字段&#xff1a; start_time(表示该条记录的生命周期开始时间——周期快照时的状态)end_time(该条记录的生命周期结束时…

JSP合同信息管理系统参考论文(论文 + 源码)

【免费】JSP合同信息管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89273651JSP合同信息管理系统 摘要 随着信息科学技术的飞速发展&#xff0c;人们逐渐意识到对信息管理软件的运用可以使日常工作更加方便、快捷和高效。论文详细论述了公司合同管理系…

Mysql 8.0 -- 最新版本安装(保姆级教程)

Mysql 8.0 -- 最新版本安装&#xff08;保姆级教程&#xff09; ​​ 一&#xff0c;下载Mysql数据库&#xff1a; 官网链接&#xff1a;https://www.mysql.com/downloads/ 二&#xff0c;安装Mysql: 三&#xff0c;找到Mysql安装目录&#xff1a; 找到mysql安装目录&#xf…

在k8s中安装Grafana并对接Prometheus,实现k8s集群监控数据的展示

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Grafana&#xff1a;让数据说话的魔术师》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Grafana简介 2、Grafana的重要性与影响力 …

C进阶--自定义类型

自定义类型 1. 结构体1.1. 结构的基本知识1.2 结构的声明1.3 特殊的声明1.4 结构的自引用1.5 结构体变量的定义和初始化1.6 结构体内存对齐结构体的大小练习结构体对齐规则为什么存在内存对齐? 1.7 修改默认对齐数1.8 结构体传参 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 …

MWeb Pro for Mac:功能强大的Markdown博客编辑器

MWeb Pro for Mac是一款功能强大的Markdown博客编辑器&#xff0c;专为Mac用户设计&#xff0c;提供了一站式的博客写作和发布体验。这款软件不仅支持Markdown语法&#xff0c;还提供了丰富的编辑和排版功能&#xff0c;让用户能够轻松创建出精美的博客内容。 MWeb Pro的即时预…

笔试强训Day16 字符串 基础算法 双指针

QR6 字符串替换 题目链接&#xff1a;字符串替换_牛客题霸_牛客网 (nowcoder.com) 思路&#xff1a;简单的字符串操作。 AC code&#xff1a; class StringFormat { public:string formatString(string A, int n, vector<char> arg, int m) {string ans;int pos 0;f…

【Qt】按钮类控件

文章目录 1 :peach:Push Button:peach:2 :peach:Radio Buttion:peach:3 :peach:Check Box:peach:4 :peach:Tool Button:peach: 1 &#x1f351;Push Button&#x1f351; 使⽤ QPushButton 表⽰⼀个按钮&#xff0c;这也是当前我们最熟悉的⼀个控件了&#xff0c;QPushButton …

论文阅读:《Sequence can Secretly Tell You What to Discard》,减少推理阶段的 kv cache

目前各类大模型都支持长文本&#xff0c;例如 kimi chat 以及 gemini pro&#xff0c;都支持 100K 以及更高的上下文长度。但越长的上下文&#xff0c;在推理过程中需要存储的 kv cache 也越多。假设&#xff0c;数据的批次用 b 表示&#xff0c;输入序列的长度仍然用 s 表示&a…

3.栈和队列(汇总版)

目录 1.栈&#xff08;一端插和删&#xff09; 2.队列&#xff08;一端插另一段删&#xff09; 2.1队列的概念及结构 2.2 队列的实现 队列的接口 1.初始化队列 2.销毁队列 3.插入元素 4.出队列&#xff08;头删&#xff09; 5.访问对头 6.访问队尾 7.判断队列是否为…

基于springboot实现的疫情网课管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

证明力引导算法forceatlas2为什么不是启发式算法

一、基本概念 吸引力 F a ( n i ) ∑ n j ∈ N c t d ( n i ) ω i , j d E ( n i , n j ) V i , j \displaystyle \bm{F}_a(n_i) \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \omega_{i,j} \; d_E(n_i,n_j) \bm{V}_{i,j} Fa​(ni​)nj​∈Nctd​(ni​)∑​ωi,j​dE​(ni​,nj​…

【StarRocks系列】 Trino 方言支持

我们在之前的文章中&#xff0c;介绍了 Doris 官方提供的两种方言转换工具&#xff0c;分别是 sql convertor 和方言 plugin。StarRocks 目前同样也提供了类似的方言转换功能。本文我们就一起来看一下这个功能的实现与 Doris 相比有何不同。 一、Trino 方言验证 我们可以通过…

C语言 | Leetcode C语言题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; void setZeroes(int** matrix, int matrixSize, int* matrixColSize) {int m matrixSize;int n matrixColSize[0];int flag_col0 false;for (int i 0; i < m; i) {if (!matrix[i][0]) {flag_col0 true;}for (int j 1; j < n; j…

C++:多继承虚继承

在C中&#xff0c;虚继承&#xff08;Virtual Inheritance&#xff09;是一种特殊的继承方式&#xff0c;用于解决菱形继承&#xff08;Diamond Inheritance&#xff09;问题。菱形继承指的是一个类同时继承自两个或更多个具有共同基类的类&#xff0c;从而导致了多个实例同一个…

20240507最新 ubuntu20.04安装ros noetic

ubuntu20.04安装ros 主要参考博客 【ROS】在 Ubuntu 20.04 安装 ROS 的详细教程_ubuntu20.04安装ros-CSDN博客 出现问题 1.ubuntu20.04 更换清华源报错 ubuntu20.04 更换清华源报错_gvfs metadata is not supported. fallback to teplme-CSDN博客 &#xff1f;&#xff1f…

汽车 - 什么是车轮抱死

车轮抱死分为两种情况&#xff0c;一种是车辆故障层面&#xff0c;另一种是驾驶过程中的物理现象。我们先来说最通俗的刹车车轮抱死吧。 刹车制动车轮抱死 车轮停止轴向转动就是抱死&#xff0c;有速度的情况下抱死车轮&#xff0c;如果车辆的惯性动能大于轮胎抓地力&#xff0…

Springboot集成Mybatispuls操作mysql数据库-03

MyBatis-Plus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强而不做改变。它支持所有MyBatis原生的特性&#xff0c;因此引入MyBatis-Plus不会对现有的MyBatis构架产生任何影响。MyBatis-Plus旨在简化开发、提高效率&#xff0c;…