当前位置: 首页 > 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;任何一端发送数据后都需要另一端…...

Windows和Linux在客户端/服务端在安全攻防方面的区别

Windows和Linux在客户端/服务端的安全攻防上存在一些显著区别&#xff0c;主要体现在系统架构、权限管理、安全工具、更新机制以及社区支持等方面。 一、系统架构与设计差异 1. 内核架构 Windows&#xff1a;Windows是一个闭源的操作系统&#xff0c;由微软开发和维护&#…...

VUE 仿神州租车-开放平台

项目背景&#xff1a; 神州租车是一家提供汽车租赁服务的公司&#xff0c;其API开放平台为开发者提供了访问神州租车相关服务和数据的接口。用VUE技术来仿照其开发平台。 成果展示&#xff1a; 首页&#xff1a; API文档&#xff1a; 关于我们&#xff1a;...

计算机的错误计算(一百二十九)

摘要 用错数解释计算机的错误计算&#xff08;一百二十七&#xff09;中的计算错误的原因。 从&#xff08;一百二十七&#xff09;知&#xff0c; 有四种形式&#xff1a; 四个 分别有1位、8位、8位、0位错误数字。 下面用错数解释前面3个错误计算的由来。 &#xff08;1&a…...

process.platform 作用

process.platform 可以获取当前运行 Node.js 进程的操作系统平台的信息。 一、平台特定的代码执行 1. 适应不同操作系统 不同的操作系统可能有不同的行为、文件路径格式、命令行参数等。通过检查process.platform的值&#xff0c;可以根据当前运行的平台执行特定的代码逻辑。…...

Java项目-基于springboot框架的企业客户信息反馈系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…...

《深度学习》dlib 人脸应用实例 仿射变换 换脸术

目录 一、仿射变换 1、什么是仿射变换 2、原理 3、图像的仿射变换 1&#xff09;图像的几何变换主要包括 2&#xff09;图像的几何变换主要分为 1、刚性变换&#xff1a; 2、仿射变换 3、透视变换 3&#xff09;常见仿射变换 二、案例实现 1、定义关键点索引 2、定…...

springboot044美容院管理系统(论文+源码)_kaic

本科毕业设计论文 题目&#xff1a;美容院管理系统设计与实现 系 别&#xff1a; XX系&#xff08;全称&#xff09; 专 业&#xff1a; 软件工程 班 级&#xff1a; 软件工程15201 学生姓名&#xff1a; 学生学号&#xff1a; 指导教师&#xff1a; 导师…...

大数据新视界 --大数据大厂之数据脱敏技术在大数据中的应用与挑战

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

Erric Gamma 关于resuable code的采访

采访地址 The risk of speculating Bill Venners: The GoF book says, “The key to maximizing reuse lies in anticipating new requirements and changes to existing requirements, and in designing your systems so they can evolve accordingly. To design a system s…...

【Ubuntu18.04命令行code打不开】可能的解决方法

目录 问题&#xff1a;命令行code打不开文件尝试① kimi是这么说的② sudo apt-get install apparmor apparmor_utils③ 在混沌的操作完以上一通后&#xff0c;sudo apt-get install snapd 我试了将近一个小时 : ( so depressed 我只是想用vscode打开个文件夹&#xff0c;我甚至…...