如何使用 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 功能,既能解决误提交的问题,又能在多人协作时避免对其他人的工作产生影响。

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

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

相关文章

使用yield压平嵌套字典有多简单?

我们经常遇到各种字典套字典的数据&#xff0c;例如&#xff1a; nest_dict {a: 1,b: {c: 2,d: 3,e: {f: 4}},g: {h: 5},i: 6,j: {k: {l: {m: 8}}} } 有没有什么简单的办法&#xff0c;把它压扁&#xff0c;变成&#xff1a; {a: 1,b_c: 2,b_d: 3,b_e_f: 4,g_h: 5,i: 6,j_k_l_…

提交任务时,线程池队列已满,这时会发生什么

当提交任务到线程池时&#xff0c;如果线程池的任务队列已满&#xff0c;具体会发生什么取决于线程池的配置和提交任务的方式。以下是对这一情况的详细分析&#xff1a; 一、线程池状态分析 任务队列已满&#xff1a;线程池中的任务队列已经达到其容量上限&#xff0c;无法再…

【Linux系统内核探索】进程调度

文章目录 进程调度什么是进程调度&#xff1f;进程调度算法task_struct的链式结构 总结 进程调度 什么是进程调度&#xff1f; 进程调度是操作系统内核的核心功能之一&#xff0c;负责在多个进程之间分配CPU时间&#xff0c;使得系统能够同时运行多个进程。因为计算机的CPU资…

MongoDB的基本操作

&#x1f337;数据库准备 &#x1f388;Mongoshell 1.在指定目录下创建mongodb文件夹、其子文件log和data以及mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log 执行mongodb命令启动mongdb服务 mongod --dbpath /h…

编解码基础 -- 图像编码之HEIF

HEIF 技术文档 HEIF&#xff08;High Efficiency Image Format&#xff0c;高效图像格式&#xff09;是一种基于 HEVC&#xff08;High Efficiency Video Coding&#xff0c;高效视频编码&#xff0c;亦称 H.265&#xff09;的视频编码技术的图像文件格式。HEIF 由 MPEG&#…

SwiftUI:单个App支持设置多语言

SwiftUI 全新多语言方案 简化本地化的字符串- WWDC21 - 视频 本地化您的SwiftUI app - WWDC21 - 视频 构建全球化App&#xff1a;本地化的示例- WWDC22 - 视频 构建支持多语言的App - WWDC24 - 视频 单个App支持设置多语言 工程 Info.plist里添加 键值UIPrefersShowingLangua…

机器视觉相机自动对焦算法

第一&#xff0c;Brenner梯度法、 第二&#xff0c;Tenegrad梯度法、 第三&#xff0c;laplace梯度法、 第四&#xff0c;方差法、 第五&#xff0c;能量梯度法。 此实例通过使用Halcon实现5种清晰度算法函数&#xff1a; 1. 方差算法函数&#xff1b; 2. 拉普拉斯能量函数…

什么是 Robots.txt 文件 重要性、作用和对 SEO 的影响

Robots.txt 文件是一个简单的文本文件&#xff0c;它指示网络爬虫网站的哪些内容可以索引&#xff0c;哪些内容不应该索引。Robots.txt 文件位于网站的根目录中&#xff0c;指导搜索引擎爬虫索引哪些内容&#xff0c;忽略哪些内容。它在塑造网站在搜索结果中的存在方面起着至关…

DDD重构-实体与限界上下文重构

DDD重构-实体与限界上下文重构 概述 DDD 方法需要不同类型的类元素&#xff0c;例如实体或值对象&#xff0c;并且几乎所有这些类元素都可以看作是常规的 Java 类。它们的总体结构是 Name: 类的唯一名称 Properties&#xff1a;属性 Methods: 控制变量的变化和添加行为 一…

大数据Azkaban(二):Azkaban简单介绍

文章目录 Azkaban简单介绍 一、Azkaban特点 二、Azkaban组成结构 三、Azkaban部署模式 1、solo-server ode&#xff08;独立服务器模式&#xff09; 2、two server mode&#xff08;双服务器模式&#xff09; 3、distributed multiple-executor mode&#xff08;分布式多…

Threejs 实现3D 地图(01)创建基本场景

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" <script setup> import { onMounted,ref } from vue import * as THREE from three import * as d3 from "d3"; //莫开托坐标 矫正地图…

Vertx实现一个通用的MqttServer

mqtt协议介绍 简介 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅范式的“轻量级”消息协议&#xff0c;由 IBM 发布。 IoT 设备要运作&#xff0c;就必须连接到互联网&#xff0c;设备才…

数据分析-Apache_hive

任务一 创建库及外部表 在 comm 数 据 库 下 创 建 一 个 名 为 dws_behavior_log的外部表&#xff0c;如果表已存在&#xff0c;则先删除&#xff1b;分 区字段为dt&#xff0c;即根据日期进行分区&#xff1b;另外&#xff0c;要求指定表的存 储路径为HDFS的/behavior/dws/d…

java让系统直接播放音频/java获取音频流输送到播放设备SourceDataLine

Java Sound API支持常见的格式&#xff1a; WAV&#xff08;Waveform Audio File Format&#xff09; 常见的无损音频格式&#xff0c;支持 PCM&#xff08;脉冲编码调制&#xff09;编码。 AIFF&#xff08;Audio Interchange File Format&#xff09; 主要用于 Macintosh 系统…

OpenCV视觉分析之运动分析(2)背景减除类:BackgroundSubtractorKNN的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 K-最近邻&#xff08;K-nearest neighbours, KNN&#xff09;基于的背景/前景分割算法。 该类实现了如 319中所述的 K-最近邻背景减除。如果前景…

058_基于python时尚女装抖音号评论数据分析系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

智慧城管综合管理系统源码,微服务架构,基于springboot、vue+element+uniapp技术开发,支持二次开发

智慧城管源码&#xff0c;智慧城管执法办案系统源码 智慧城管综合执法办案平台是智慧城市框架下&#xff0c;依托物联网、云计算、多网融合等现代化技术&#xff0c;运用数字基础资源、多维信息感知、协同工作处置、智能化辅助决策分析等手段&#xff0c;形成具备高度感知、互联…

C++共同体

共同体是一种数据格式&#xff0c;他能储存不同的数据类型&#xff0c;但是同一时间只能储存其中的一种类型。 语法&#xff1a; union 共同体名 { 成员一的数据类型 成员名一&#xff1b; 成员二的数据类型 成员名二&#xff1b; 成员n的数据类型 成员名n&#xff1b; }

目标检测算法-YOLOV11解析

原文首发于微信公众号 微信公众号-人工智能与图像处理&#xff1a;目标检测算法-YOLOV11解析 一&#xff0c;YOLOV11概述 YOLOv11是由Ultralytics公司开发的新一代目标检测算法&#xff0c;它在之前YOLO版本的基础上进行了显著的架构和训练方法改进。整合了改进的模型结构设计…

Redis Search系列 - 第四讲 支持中文

目录 一、支持中文二、自定义中文词典2.1 Redis Search设置FRISOINI参数2.2 friso.ini文件相关配置1&#xff09;自定义friso UTF-8字典2&#xff09;修改friso.ini配置文件 三、实测中文分词效果 一、支持中文 Redis Stack 从版本 0.99.0 开始支持中文文档的添加和分词。中文…