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

测序技术演进:从Sanger到纳米孔的突破与应用

1. 测序技术的前世今生&#xff1a;从实验室到生命密码解读 想象一下你手里拿着一本由30亿个字母组成的书&#xff0c;每个字母只有0.34纳米大小&#xff0c;而你的任务是准确无误地抄写整本书——这就是基因组测序工作的真实写照。我第一次接触测序技术是在2008年&#xff0c;…...

Qwen3-VL:30B在嵌入式系统的轻量化部署方案

Qwen3-VL:30B在嵌入式系统的轻量化部署方案 将30B参数的多模态大模型塞进嵌入式设备&#xff1f;这听起来像是天方夜谭&#xff0c;但通过巧妙的轻量化技术&#xff0c;我们确实能让Qwen3-VL在资源受限的环境中运行起来。 1. 为什么要在嵌入式系统部署大模型&#xff1f; 你可…...

从零开始:如何用AutoModelForCausalLM.from_pretrained加载自定义模型(含本地模型和私有模型)

从零开始&#xff1a;AutoModelForCausalLM.from_pretrained加载自定义模型实战指南 当你第一次尝试加载一个自定义的因果语言模型时&#xff0c;可能会被各种参数和配置选项搞得晕头转向。作为一位经历过无数次模型加载失败的开发者&#xff0c;我深知那种看着报错信息却不知…...

提升表单开发效率:基于快马AI一键生成w777.7cc验证表单组件

今天在开发一个用户注册功能时&#xff0c;遇到了表单验证这个老生常谈的问题。以前每次都要手动写一堆验证逻辑&#xff0c;既费时又容易出错。这次尝试用w777.7cc框架结合InsCode(快马)平台的AI辅助功能&#xff0c;发现开发效率提升了不少&#xff0c;分享下具体实现过程。 …...

新手前端开发入门:借助快马AI从零理解小恐龙游戏代码逻辑

今天想和大家分享一个特别适合前端新手的练手项目——用HTML、CSS和JavaScript实现一个简易的小恐龙游戏。这个项目结构清晰&#xff0c;能帮助我们快速理解前端三件套的协作方式。最近我在InsCode(快马)平台上尝试了这个项目&#xff0c;发现它的AI辅助功能对新手特别友好。 项…...

7类水面自动驾驶目标检测数据集该数据集已经包括7个类别类别名字分别是:[‘pier‘, ‘ship‘, ‘boat‘, ‘sailor‘, ‘buoy‘, ‘vessel‘, ‘kayak‘]

7类水面自动驾驶目标检测数据集 该数据集已经包括7个类别 类别名字分别是&#xff1a; [pier, ship, boat, sailor, buoy, vessel, kayak] 共计图片54120张&#xff0c;图像分辨率是1920x1080 数据集是txt格式 数据集按照7:1:2已划分为训练集/验证集和测试集 相关YOLOv5/YOLOv6…...

Scrapy框架突破中国裁判文书网多重反爬机制的Python爬虫解决方案

Scrapy框架突破中国裁判文书网多重反爬机制的Python爬虫解决方案 【免费下载链接】Wenshu_Spider :rainbow:Wenshu_Spider-Scrapy框架爬取中国裁判文书网案件数据(2019-1-9最新版) 项目地址: https://gitcode.com/gh_mirrors/wen/Wenshu_Spider 在司法数据挖掘与法律科技…...

AutoUnipus学习效率工具:提升在线学习体验的智能辅助方案

AutoUnipus学习效率工具&#xff1a;提升在线学习体验的智能辅助方案 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 在数字化学习环境中&#xff0c;学生常面临在线课程任务繁重…...

Hotkey Detective终极指南:3步快速解决Windows热键冲突问题

Hotkey Detective终极指南&#xff1a;3步快速解决Windows热键冲突问题 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...

【Linux 物联网网关主控系统-Web部分(四)】

Linux 物联网网关主控系统-Web部分&#xff08;四&#xff09;调用关系总体框架main.htmltop.htmlleft.htmlright.htmlcgi部分调用关系 总体框架 main.html 调用的 HTML&#xff1a; top.html left.html right.html &#xff08;框架集页面&#xff0c;加载顶部、左侧、右侧三…...