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

news2024/10/5 22:24:57

【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>
    

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

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

相关文章

k8s保持pod健康

存活探针 Kubemetes 可以通过存活探针 (liveness probe) 检查容器是否还在运行。可以为 pod 中的每个容器单独指定存活探针。如果探测失败&#xff0c;Kubemetes 将定期执行探针并重新启动容器。 Kubemetes 有以下三种探测容器的机制&#xff1a; HTTP GET 探针对容器的 IP 地…

深入探索归并排序算法:分而治之的排序艺术

在计算机科学领域&#xff0c;排序算法是一项基础且重要的技术&#xff0c;归并排序作为一种经典的分治算法&#xff0c;以其稳定性和高效性而闻名。本文将带您深入探索归并排序算法的原理、实现方法以及应用场景&#xff0c;揭示这一排序艺术背后的精髓。 **归并排序算法简介…

【管理篇】管理三步曲:管理规划(一)

目录标题 管理到底都要做哪些事呢如何开始带团队&#xff1f; 职能&#xff1a;如何界定团队是干什么的&#xff1f;目标&#xff1a;如何为团队设定合理的目标规划资源&#xff1a;需要申请哪些资源&#xff08;1&#xff09;你是否了解资源的丰富性&#xff1f;&#xff08;2…

判断dll/lib是32/64位、查看lib是导入库/静态库的方法 、查看dll包含的符合、lib包含的函数

一、判断dll/lib是32/64位 原文链接&#xff1a;https://www.cnblogs.com/bandaoyu/p/16752602.html 1. 简便方法&#xff1a; 直接用记事本或者notepad(或txt文本)打开exe文件&#xff08;dll文件&#xff09;&#xff0c;会有很多乱码&#xff0c;不要头疼&#xff0c;接下…

优雅处理返回信息状态码:Result对象在Spring Boot中的应用

前言 在开发过程中&#xff0c;处理返回的信息状态码是一个重要的问题&#xff0c;尤其是在大型项目中。为了统一处理这些状态码&#xff0c;我在Spring Boot中创建了一个名为Result的Java对象&#xff0c;用于封装返回的信息和状态码。在本文中&#xff0c;我将分享如何实现这…

网络安全的重要性及人才需求

安全现在是大趋势&#xff0c;说是铁饭碗也不为过&#xff0c;就业前景好&#xff0c;方向多比传统计算机行业就业舒服点。但是大厂依然是985&#xff0c;211的天下&#xff0c;是双非能进大厂的&#xff0c;只是凤毛麟角。前提是你的能力可以让公司忽略你的学历。 以2023年为…

Leetcode—622. 设计循环队列【中等】

2024每日刷题&#xff08;128&#xff09; Leetcode—622. 设计循环队列 实现代码 class MyCircularQueue { public:MyCircularQueue(int k): q(k) {qSize k;}bool enQueue(int value) {if(isFull()) {return false;}q[rear] value;rear (rear 1) % qSize;deflag false;…

精准读取CSV/Excel数据 - 灵活指定行列范围的 Python 解决方案

文章目录 源代码项目简介导入相关库__file_exists 装饰器函数的签名和注释主要功能的实现运行演示读取 Excel 文件 源代码 https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目简介 PyPrecip 是一个专注于气候数据处理的 Python 库&#xf…

【STM32嵌入式系统设计与开发】——18DAC(DAC输出应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#…

Python3中Richdem包遇到问题

Python3中Richdem包遇到问题 文章目录 Python3中Richdem包遇到问题问题一报错解决 问题二报错解决 参考 问题一 报错 RichDEM 是一套数字高程模型 &#xff08;DEM&#xff09; 水文分析工具&#xff0c;这次打算用richdem进行地形分析&#xff0c;尝试在conda里面安装richde…

UDP如何端口映射?

UDP端口映射是一种网络技术&#xff0c;通过它可以实现在异地组网的情况下&#xff0c;不暴露在公网上&#xff0c;通过私有通道传输数据&#xff0c;并对数据进行安全加密&#xff0c;以保障数据的安全性。这项技术在如今日益复杂和危险的网络环境中显得尤为重要。 UDP&#x…

【1】STM32·FreeRTOS·新建工程模板【一步到位】

目录 一、获取FreeRTOS源码 二、FreeRTOS源码简介 2.1、FreeRTOS源码文件内容 2.2、FreeRTOS内核 2.3、Source文件夹 2.4、portable文件夹 三、FreeRTOS手把手移植 3.1、FreeRTOS移植准备 3.2、FreeRTOS移植步骤 3.2.1、将 FreeRTOS 源码添加至基础工程、头文件路径等…

构建第一个ArkTS应用之@LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内&#xff0c;在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器&#xff1a;LocalStorageProp和LocalS…

「 网络安全常用术语解读 」漏洞利用预测评分系统EPSS详解

1. 概览 EPSS&#xff08;Exploit Prediction Scoring System&#xff0c;漏洞利用预测评分系统&#xff09; 提供了一种全新的高效、数据驱动的漏洞管理功能。EPSS是一项数据驱动的工作&#xff0c;使用来自 CVE 的当前威胁信息和现实世界的漏洞数据。 EPSS 模型产生 0 到 1&…

libcity笔记:添加新模型(以RNN.py为例)

创建的新模型应该继承AbstractModel或AbstractTrafficStateModel 交通状态预测任务——>继承 AbstractTrafficStateModel类轨迹位置预测任务——>继承AbstractModel类 1 AbstractTrafficStateModel 2 RNN 2.1 构造函数 2.2 predict 2.3 calculate_loss

【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?

文章目录 5.何为分布式&#xff1f;分布式锁&#xff1f;和微服务关系&#xff1f;5.1何为分布式&#xff1f;5.1.1定义5.1.2例子5.1.3优缺点&#xff08;1&#xff09;优点&#xff08;2&#xff09;缺点 5.2何为分布式锁&#xff1f;5.2.1定义5.2.2必要性 5.3区分分布式和微服…

ISIS的基本概念

1.ISIS概述 IS-IS是一种链路状态路由协议&#xff0c;IS-IS与OSPF在许多方面非常相似&#xff0c; 例如运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此&#xff0c;然后建立邻接关系&#xff0c;并交互链路状态信息。 CLNS由以下三个部分组成&#xff1a; CLNP&#xf…

Python | Leetcode Python题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m, n len(matrix), len(matrix[0])flag_col0 Falsefor i in range(m):if matrix[i][0] 0:flag_col0 Truefor j in range(1, n):if matrix[i][j] 0:matrix[i]…

OpenSSL实现AES-CBC加解密,可一次性加解密任意长度的明文字符串或字节流(QT C++环境)

本篇博文讲述如何在Qt C的环境中使用OpenSSL实现AES-CBC-Pkcs7加/解密&#xff0c;可以一次性加解密一个任意长度的明文字符串或者字节流&#xff0c;但不适合分段读取加解密的&#xff08;例如&#xff0c;一个4GB的大型文件需要加解密&#xff0c;要分段读取&#xff0c;每次…

牛客NC85 拼接所有的字符串产生字典序最小的字符串【中等 排序 Java/Go/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/f1f6a1a1b6f6409b944f869dc8fd3381 思路 排序后直接拼接结果Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…