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

如何使用 Git Cherry-Pick 和 Reset 处理误提交,并确保安全回滚

在开发过程中,偶尔会遇到不小心将功能开发提交到错误分支上的情况。假设我们计划在 10 月 24 号上线某些功能,但却不小心在 10 月 17 号的上线分支上进行了开发。为了解决这个问题并将误提交的内容移到正确的分支上,我们可以借助 Git 的一些功能,例如 cherry-pickreset,并通过更安全的方式将分支回滚到正确状态。

场景

问题:在 10 月 17 号上线的分支 release-10.17 上开发了 10 月 24 号上线的功能。我们需要:

  1. master 分支拉取一个新的分支,作为 10.24 号的上线分支。
  2. 找到误提交的内容并将其移到正确的分支上。
  3. 将错误的提交回滚并同步到远程仓库。
  4. 使用 安全的回滚方式 确保分支不会被误改。

操作步骤

1. 创建 10.24 号上线分支

首先,基于 master 分支创建新的分支,作为 10.24 号的上线分支:

git checkout master
git pull origin master  # 确保本地 master 分支是最新的
git checkout -b release-10.24  # 创建并切换到 10.24 号上线分支
2. 查找误提交的记录

在 10.17 号分支上,使用 git log 查看误提交的记录:

git checkout release-10.17  # 切换到 10.17 号上线分支
git log --oneline  # 查看提交记录

例如,你的日志输出可能如下:

456def2 增加日志功能
123abc4 修复登录问题

我们发现 456def2123abc4 是误提交到 release-10.17 分支的内容。

3. 使用 cherry-pick 将误提交内容应用到正确分支

接下来,回到 10.24 号的上线分支,通过 git cherry-pick 将误提交的内容转移到正确的分支上:

git checkout release-10.24  # 切换回 10.24 号上线分支
git cherry-pick 456def2 123abc4  # 将误提交的变更应用到 10.24 号上线分支
4. 回滚 10.17 分支的误提交

为了让 release-10.17 分支回到误提交之前的状态,我们可以使用 git reset --hard 命令回滚到指定的提交。例如,如果 abcd1234 是 10.17 上最后一个正确的提交:

git checkout release-10.17  # 切换到 10.17 号上线分支
git reset --hard abcd1234  # 回滚到没有误提交之前的状态
5. 将回滚同步到远程仓库

回滚操作只影响本地仓库,因此我们需要将回滚结果推送到远程仓库。为了防止误操作,我们可以使用 --force-with-lease 选项进行更安全的推送:

git push origin release-10.17 --force-with-lease

--force-with-lease 是一种比 --force 更安全的方式。它会确保远程分支自从你上次拉取后没有其他人修改过,这样你可以避免覆盖掉别人提交的代码。

Git 命令及其作用

以下是常用的Git命令

命令作用示例
git init初始化一个新的 Git 仓库git init
git clone <repo-url>克隆远程仓库到本地git clone https://github.com/user/repo.git
git add <file>添加文件到暂存区,准备提交git add index.html
git commit -m "<message>"提交暂存区中的文件到本地仓库,并附带提交信息git commit -m "修复登录问题"
git status查看当前工作区状态,包括已修改、暂存的文件git status
git log查看提交历史git log
git log --oneline查看简洁的提交历史(每条记录显示一行)git log --oneline
git pull从远程仓库获取最新代码并合并到当前分支git pull origin master
git push将本地提交推送到远程仓库git push origin master
git branch查看本地分支git branch
git checkout <branch>切换到指定分支git checkout feature-branch
git checkout -b <branch>创建并切换到一个新的分支git checkout -b release-10.24
git merge <branch>将指定分支的代码合并到当前分支git merge feature-branch
git reset --hard <commit-hash>回滚到指定的提交,并丢弃工作区的更改git reset --hard abcd1234
git cherry-pick <commit-hash>应用指定提交的内容到当前分支git cherry-pick 456def2
git stash暂时保存工作区的修改,以便切换分支或执行其他操作git stash
git stash pop恢复最后一次保存的暂存内容git stash pop
git rebase <branch>将当前分支的提交移到指定分支的顶端git rebase master
git remote -v查看远程仓库信息git remote -v
git branch -d <branch>删除本地分支git branch -d feature-branch
git push origin --delete <branch>删除远程分支git push origin --delete release-10.17
git push origin <branch-name> --force-with-lease强制推送本地分支到远程,但确保远程分支没有被他人修改git push origin release-10.17 --force-with-lease
说明
  • git reset --hard: 回滚到指定的提交,同时丢弃所有未提交的更改。这是一个非常强的操作,谨慎使用。
  • git cherry-pick: 可以从某个分支上挑选特定的提交,应用到当前分支,适合处理误提交的情况。
  • --force-with-lease: 这是一个相对安全的强制推送选项,它确保远程仓库中的分支自你上次拉取之后没有被别人更新过。避免直接使用 --force 覆盖别人提交的代码。

总结

通过 git cherry-pickgit reset --hard,我们可以有效地解决误提交的问题。具体步骤如下:

  1. 创建新的上线分支:基于 master 创建新的 10.24 号上线分支。
  2. 查找误提交记录:使用 git log 查找 10.17 分支上误提交的内容。
  3. 应用误提交到正确分支:通过 git cherry-pick 将误提交内容转移到 10.24 分支。
  4. 回滚错误提交:使用 git reset --hard 回滚 10.17 分支的误提交。
  5. 安全推送远程仓库:通过 git push origin <branch-name> --force-with-lease 确保回滚操作安全地同步到远程仓库。

使用这些 Git 功能,既能解决误提交的问题,又能在多人协作时避免对其他人的工作产生影响。

相关文章:

如何使用 Git Cherry-Pick 和 Reset 处理误提交,并确保安全回滚

在开发过程中&#xff0c;偶尔会遇到不小心将功能开发提交到错误分支上的情况。假设我们计划在 10 月 24 号上线某些功能&#xff0c;但却不小心在 10 月 17 号的上线分支上进行了开发。为了解决这个问题并将误提交的内容移到正确的分支上&#xff0c;我们可以借助 Git 的一些功…...

Goland 搭建Gin脚手架

一、使用编辑器goland 搭建gin 打开编辑器 新建项目后 点击 create 二、获得Gin框架的代码 命令行安装 go get -u github.com/gin-gonic/gin 如果安装不上&#xff0c;配置一下环境 下载完成 官网git上下载 这样就下载完成了。、 不过这种方法需要设置一下GOPATH 然后再执…...

Java Spring的高级装配

1.profile与bean 1.1 profile 如果我们在配置类中装配一个bean&#xff0c;但是这个bean与环境相关怎么办&#xff1f; 比如有一个类&#xff0c;它在开发环境采取一种模式&#xff0c;但是到了生产环境&#xff0c;有需要使用另一种环境。 当然&#xff0c;你可能会说&…...

分布式光伏发电系统电气一次部分设计(开题报告2)

毕业论文(设计)开题报告 题目 分布式光伏发电系统电气一次部分设计 题目类别 毕业设计 姓名 专业 班级 学号 一、选题背景及依据(简述国内外研究状况和相关领域中已有的研究成果(文献综述),选题目的、意义,列出主要参考文献) (一)选题背景与依据 选题背景与依据: …...

【设计模式-迪米特法则】

迪米特法则&#xff08;Law of Demeter&#xff0c;LoD&#xff09;&#xff0c;也称为最少知识原则&#xff08;Principle of Least Knowledge&#xff09;&#xff0c;是一种面向对象编程中的设计原则。它的核心思想是&#xff1a;一个对象应当尽可能少地了解其他对象&#x…...

Webpack安装

全局安装 npm install -g webpack webpack-cli安装后查看版本号&#xff1a; webpack -v初始化项目 npm init -yJS打包 webpack目录下创建配置文件webpack.config.js 以下配置的意思是&#xff1a;读取当前项目目录下src文件夹中的main.js&#xff08;入口文件&#xff09…...

前端开发学习(一)VUE框架概述

一、MVC模式与MVVM模式 1.1mvc模式 MVC模式是移动端应用广泛的软件架构之一&#xff0c;MVC模式将应用程序划分为3部分:Model(数据模型)、View(用户界面视图)和Controller(控制器)。MVC模式的执行过程是将View层展示给用户&#xff0c;也就是通过 HTML页面接受用户动作&#…...

Linux操作系统的背景、发展历程及对比分析

1. UNIX发展历史 unix_百度百科 UNIX操作系统作为现代操作系统的奠基石&#xff0c;其发展历史可以追溯到20世纪60年代末。1969年&#xff0c;贝尔实验室的Ken Thompson、Dennis Ritchie以及他们的同事们为了实现一种多任务的、可移植的、简洁而高效的操作系统&#xff0c;开发…...

gaussdb 基础管理 数据库 表 用户 模式 权限 存储过程

数据库database #创建数据库&#xff0c;指定字符集UTF8&#xff0c;缺省情况下新数据库将通过复制标准系统数据库template0来创建&#xff0c;且仅支持使用template0来创建。 CREATE DATABASE devdb ENCODING UTF8 template template0; CREATE DATABASE testdb; 标识符的命名…...

i9-11900H+3070laptop+win10下的yolov5配置

参考博客&#xff1a;https://blog.csdn.net/qq_67105081/article/details/138232424 关键问题&#xff1a; 1、由之前装的CUDA11.6&#xff08;有篇博客上可以换版本&#xff09;CUDNN8.4.0Python3.9.13推后在指定的虚拟环境中装了Pytorch1.12.1(在AnnacondaPrompt下用pip命令…...

SpringBoot日常:封装redission starter组件

文章目录 逻辑实现POM.xmlRedissionConfigRedissionPropertiesRedissionUtilsspring.factories 功能测试application.yml配置POM.xmlTestController运行测试 本章内容主要介绍如何通过封装相关的redission连接配置和工具类&#xff0c;最终完成一个通用的redission starter。并…...

腾讯云技术深度解析:构建高效云原生应用与数据安全管理

腾讯云技术深度解析&#xff1a;构建高效云原生应用与数据安全管理 在当今快速发展的技术环境中&#xff0c;云计算已经成为企业数字化转型的关键驱动力。腾讯云作为中国领先的云服务提供商&#xff0c;凭借其卓越的技术和创新能力&#xff0c;为企业提供了高效、可扩展的云原…...

ACM与蓝桥杯竞赛指南 基本输入输出格式二

A B || 继续看第二个AB问题&#xff0c;A B || &#xff0c;大家可以先自行读题&#xff0c;或者有经验直接看输入输出格式&#xff0c;发现依然是求AB&#xff0c;但它的输入数据为&#xff1a; 2 1 5 10 20 输出&#xff1a; 6 20 此题相比第一道而言&#xff0c;本…...

解决SolidWorks装配体无法更改透明度问题

这个问题是在零件上各个部件显示正常&#xff0c;且透明度可以更改&#xff0c;但是一到装配体上就出现问题都变成了灰色。更改透明度也不行。 解决方法&#xff1a; 1、因为该装配体里面存在过多的零部件层级的自定义外观&#xff08;这些外观可能互相之前有了干扰&#xff0…...

2024_newstar_week1_crypto

baby_mod 题目 from Crypto.Util.number import * from enc import flagm bytes_to_long(flag) p getPrime(512) q getPrime(512) r getPrime(777) t getPrime(777) tmp getPrime(15) e 65537 n p*q print(f"c {pow(m,e,n)}") print(f"leak {p*r-q*…...

6.2 URDF集成Rviz基本流程

前面介绍过&#xff0c;URDF 不能单独使用&#xff0c;需要结合 Rviz 或 Gazebo&#xff0c;URDF 只是一个文件&#xff0c;需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型&#xff0c;当前&#xff0c;首先演示URDF与Rviz的集成使用&#xff0c;因为URDF与Rviz的集成较之于…...

双系统一体机电脑无法启动报错“Something has gone serously wrong: SBAT self-check failed: Security Policy Violation”

双系统一体机电脑无法启动 问题搜索解决办法解决开启时 F2 进入系统设置界面选择“疑难解答”选择“高级选项”选择“UEFI固件设置”进入“Start Menu”界面选择“Security”关闭相关选项 问题 在2024/8/14日Windows环境&#xff0c;系统更新了两个Windows更新项后&#xff0c…...

八股面试2(自用)

mysql存储引擎 存储引擎&#xff1a;定义数据的存储方式&#xff0c;以及数据读取的实现逻辑 在以前数据库5.5默认MyISAM引擎&#xff0c;之后默认InnoDB引擎 MyISAM引擎的数据和索引是分开存储的&#xff0c;InnoDb将索引和文件存储在同一个文件。 MyISAM不支持事务&#…...

Leetcode 347 Top K Frequent Elements

题意&#xff1a; 求前k个出现频率最高的元素 首先得到一个频率图这是肯定的&#xff0c;下一步要考虑建立一个堆&#xff0c;堆中保存着前k个频率最大的数字&#xff0c;这个怎么做&#xff0c;可以用customized cmp来做&#xff0c;把数字存进去完事儿。注意这里不用 保存所有…...

[Linux网络编程]03-TCP协议

一.TCP协议数据通信的过程 TCP数据报如下&#xff0c;数据报中的标志位双端通信的关键。 三次握手: 1.客户端向服务端发送SYN标志位&#xff0c;请求建立连接&#xff0c;同时发送空包 2.服务端向客户端回发ACK标志位(即确认标志位&#xff0c;任何一端发送数据后都需要另一端…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...