不要慌!了解Git的逆向操作,轻松撤回提交

成为git砖家(6): git restore 命令 一些经典教程中使用了git reset和来分别恢复 staging area 和 working directory 内容, 虽然git保持了兼容性,但是新版的git(>=2.23)的git status命令给出的提示,是让大家用和两个命令作为替代。 阅读详情

一、什么是逆向操作?

Git 操作流程图:
在这里插入图片描述
对于正向操作来说,Git 操作是由 workspace进行add操作进入Index,再commit到Repository,最后push到Remote。

但有时候也需要一些逆向操作,比如数据文件已经由 workspace进行add操作进入Index了,但是发现本次提交的数据有些问题,想把它撤回来,即撤到workspace中;或者数据文件已经commit到Repository了,但是,我们想把数据回退,将其回退到Index或 workspace,甚至删除提交记录等。这就需要逆向操作。

逆向操作思维导图:
在这里插入图片描述

二、暂存区 到 工作空间

如果数据已经由工作空间(workspace)提交(add)到暂存区(Index)了,现在想要回退,应该怎么操作?

可以使用git restore -S 命令,它主要用于将某个文件的状态恢复为指定的状态。

git restore -S 的用途:

  • 恢复文件状态:可以将文件恢复到某个特定的提交(commit)状态。
  • 签名验证: 使用 -S 选项可以确保恢复的内容经过签名验证,符合安全标准。

使用示例:假设有一个文件 example.cc,可以使用以下命令将其恢复到指定的提交状态(例如 abc123)。

git restore -S example.cc

这样,原本在暂存区的example.cc数据将回退到Untracked files状态。

三、本地仓库 到 暂存区、工作区及清空

如果数据已经由暂存区(Index)提交(commit)到本地仓库(Repository)了,现在想要回退,应该怎么操作?

可以使用git reset --soft, git reset --mixed 和 git reset --hard ,它们的区别在于它们对工作区、暂存区和提交历史的影响程度不同。

  1. git reset --soft:主要是回退到 暂存区。

    • 影响范围:仅影响 HEAD 的位置。
    • 效果:不更改工作区和暂存区的内容,仅仅移动 HEAD 指针。
    • 适用场景:适合于需要修改最近提交历史的情况,但不想丢失当前工作区和暂存区的变更。
  2. git reset --mixed:主要是回退到 工作区(workspace),--mixed是git reset命令的默认参数。

    • 影响范围:影响 HEAD 的位置和暂存区。
    • 效果:不更改工作区内容,但是会将 HEAD 移动到指定提交,同时将这个提交之后的修改放入暂存区。
    • 适用场景:当需要撤销提交并且希望保留更改但不立即提交时使用。可以重新选择要包含在下一次提交中的更改。
  3. git reset --hard:完全取消提交和相关更改,就像重来没提交过一样。

    • 影响范围:影响 HEAD、暂存区和工作区。
    • 效果:将 HEAD 指向指定的提交,同时重置暂存区和工作区到该提交,丢弃所有未提交的更改。
    • 适用场景:适合于需要完全撤销到某个提交的情况,且不关心之前的修改。

git reset --soft命令用于重置当前分支的 HEAD 到一个指定的提交(commit),但不会更改工作区的文件或暂存区的内容。这个命令主要用于在不丢失当前工作内容的情况下,调整提交历史。因此--soft的方式是一种比较温和的方式进行重置。

语法:

git reset <--soft or --mixed or --hard> <commit or HEAD>

选择 git reset --soft 的场景:

  • 修改最近的提交历史:当你需要修改最近的一个或多个提交时,可以使用 git reset --soft 将 HEAD 重置到相应的提交,然后重新组织和提交更改。

  • 保留当前工作内容:如果你希望保留当前工作区和暂存区的内容,并在之后再次提交它们,git reset --soft 是一个不会丢失更改的选择。

  • 合并多次提交:可以用 git reset --soft 将多个小的提交合并成一个更大的提交,这样可以保持提交历史的整洁性和可读性。

四、工作区清空

要将工作区的数据清空,可以使用git checkout命令。主要用于在不同的分支之间切换、恢复文件或提交状态,以及创建新分支。

git checkout命令可以丢弃未暂存的更改,但是不会删除新文件。例如:

# 丢弃所有未暂存的更改:
git checkout .
# 丢弃自上次提交以来对文件的所有未暂存更改
git checkout <file>

git checkout -f 是 Git 中用于强制切换分支或者恢复文件到某个状态的命令。

基本用法:

  • 切换分支:当你想要切换到另一个分支,而当前分支上有未提交的更改时,执行 git checkout -f <branch> 会强制你切换到指定的 <branch>,并丢弃当前分支上的所有未保存的更改。也就是说,未提交的更改会被清除。

  • 恢复文件:如果你想要恢复某些文件到最后一次提交的状态,可以使用 git checkout -f <file>。这也会丢弃该文件在工作区中的更改,恢复为上次提交的状态。但是不会删除新文件。

例子:

# 强制切换到分支 `feature-branch`
git checkout -f feature-branch

# 强制恢复文件 `example.txt` 到最后一次提交的状态
git checkout -f example.txt

五、总结

在Git中,逆向操作是管理版本的重要部分,它帮助开发者在发现错误时及时纠正。通过使用不同的命令,如git restore和git reset,我们可以将文件或提交状态恢复到之前的状态,以应对各种情况。具体来说,git restore -S可用于恢复文件至特定提交,而git reset可实现从本地仓库到暂存区或工作区的灵活回退。此外,命令中的不同参数提供了多样化的选择,使得用户可以根据实际需求调整其操作的影响范围。掌握这些逆向操作技巧,有助于维护代码的稳定性和可管理性,确保开发过程的顺利进行。
在这里插入图片描述

在这里插入图片描述

Git 本地提交撤销 移除不想要的文件 git rm --cached 错误文件.class # 添加漏掉的文件 git add 正确文件.java # 修改提交 git commit --amend这会打开编辑器让您修改提交信息,并用新的更改替换上一次提交。 阅读详情

相关推荐

git基础教程(21)git restore还原改动

git restore <file> 表示将在工作空间但是不在暂存区的文件撤销更改. git restore --staged <file> 作用是将暂存区的文件从暂存区撤出,但不会更改文件。 演示1: 1、仓库初始状态: 干净的仓库,下面有一个readme文件 小静静@DESKTOP-MD21325 MINGW64 /d/test1/test1 (master) $ git status On branch master Your branch is up to date with

二进制君 9046

Git回滚详解

在利用git协作过程中,经常需要进行代码的撤销操作,这个行为可能发生在工作区,暂存区或者仓库区(或版本库)。 我们先讨论在工作区与暂存区发生的撤销行为,这里会有两个命令提供帮助,`git restore`与git checkout。 后面我们会讨论在仓库区发生的撤销行为,这里同样会有两个命令提供帮助,`git reset`与git revert。

曹定栓的博客 7246

最全卷积总结篇(分组、深度可分离、空洞、转置等)

分组卷积(Group Convolution)是一种卷积操作方式,它最早在AlexNet中引入,并在深度学习中被广泛使用,尤其是在高效模型设计(如MobileNet和ResNeXt)中。分组卷积通过将输入特征通道分为若干组,并在每组内单独进行卷积操作,可以减少计算复杂度和参数量,同时有效利用模型的结构特性。分组卷积的工作原理通道分组:输入特征图的通道图为C_in,输出特征图的通道数为C_out,将每组的C_in和C_out分为G组,每组的通道数为C_in/G和C_out/G。组内卷积。

qq_44815135的博客 4217

git 撤回操作

命令查找要回退到的提交的 SHA-1 值或引用名称。使用 “mixed” 模式,这将保留提交之后的更改,但将其放置在暂存区中。命令是危险的操作,它会丢弃提交历史记录,并且如果已经将更改推送到远程仓库,则可能会导致问题。这些命令将创建一个新的提交,将先前提交的更改撤销,并将更改应用于代码库。此命令将显示提交记录列表,每个提交记录都有一个唯一的 SHA-1 值和提交消息。注意,这将删除提交历史记录,并且如果已经将更改推送到远程仓库,则可能会导致问题。选项来阻止自动提交,并在撤销所有所需的提交后手动提交更改。

study_way的博客 1万+

从零到一:华为iMaster NCE-Campus部署中的Euler OS与FusionInsight深度解析

本文深入解析华为iMaster NCE-Campus部署中Euler OS与FusionInsight的关键技术要点,包括RAID配置、网络绑定技术、安装避坑指南及性能调优方案。通过实战经验和详细配置示例,帮助工程师提升部署效率与系统稳定性,确保华为企业级解决方案的高效运行。

f6g7h8i9j的博客 547

前端埋点的实践

1、前言 开始正文前先介绍一下埋点的概念~,(熟悉的朋友可以略过) 前端埋点: 是一种手段,它的目的是上报相关行为数据,相关人员以数据为依据来分析产品在用户端的使用情况,根据分析出来的结果辅助产品优化、迭代。 BI:商业智能,公司内部做数据分析相关的部门。 2、背景 在流量红利逐渐消失的现在,数据的采集、分析和精细化的运营显得更加重要,所以埋点的需求在互联网产品中是很常见的,目的上面也提到了。我们的追求就是又快又好的做好埋点工作,但是现实却不那么美好;目前我们团队在前端埋点方面存在一些痛点: 在构造埋点字段

Arui_0的博客 1771

微信防撤回终极指南:3个简单步骤保护你的聊天记录不被撤回

在当今的即时通讯时代,微信撤回功能虽然为用户提供了纠正错误的机会,但也让很多重要的聊天记录在关键时刻消失无踪。RevokeMsgPatcher作为一款专业的PC版微信防撤回补丁工具,能够有效解决这个问题,让你的聊天记录完整保存。这款免费、高效的开源工具支持微信、QQ和TIM三大主流通讯软件,为用户提供了一键式防撤回解决方案。无论你是技术爱好者还是普通用户,都能轻松掌握这个实用工具,保护你的重要对话

gitblog_00101的博客 361

扫地机器人自动回充技术大揭秘:红外、蓝牙、雷达哪种更适合你家?

本文深入解析扫地机器人自动回充技术的三种主流方案:红外、蓝牙和雷达/LiDAR,详细比较它们的原理、优缺点及适用场景。红外技术成本低但易受干扰,蓝牙穿透性好但精度随距离降低,雷达精度最高适合复杂环境。根据户型大小和家居环境,提供选购建议,帮助用户选择最适合自己家庭的自动回充方案。

weixin_29070721的博客 503

Windows微信QQ防撤回神器:RevokeMsgPatcher完全使用指南

你是否曾经因为错过重要的聊天信息而感到遗憾?当对方撤回消息时,你是不是只能看着"对方已撤回一条消息"的提示而无可奈何?今天我要向你介绍一款真正实用的工具——RevokeMsgPatcher,它能帮你永久保存所有聊天记录,让你的重要信息不再"消失"! ## 🔍 为什么需要防撤回功能? 在工作中,你可能遇到过这样的情况:领导在群里布置了重要任务,但随后又撤回了;在客户沟通中,对方发来的产品要求被

gitblog_00306的博客 1097

强网杯Web题ezphp解题全记录:利用PHP反序列化与条件竞争拿下服务器

本文详细解析了强网杯Web题目ezphp的解题过程,通过PHP反序列化与条件竞争漏洞的组合利用,成功获取服务器权限。文章深入剖析了反序列化链的构造、文件上传绕过技巧以及条件竞争的实际应用,为CTF选手和Web安全研究者提供了宝贵的实战经验。

weixin_29006187的博客 375

ENVI无法打开Landsat8的头文件问题和解决

再次将txt文件拖入ENVI中,就会得到7个波段组合后的真彩色图像,而且辐射定标所需的参数信息都已经定义好了。按住CTRL+F,查找GROUP = LEVEL1_PROCESSING_RECORD。第一行GROUP = LANDSAT_METADATA_FILE。会查到两个包含的句子,把这两个中间的部分全部删掉。双击打开该xxx_MTL.txt的头文件。删除空行后,应该为如下图的样子。把LANDSAT改为L1。

所有专家都曾始于新手 9697

PC端微信QQ防撤回终极指南:三分钟永久告别“消息已撤回“

你是否曾经因为错过了重要的微信消息而后悔莫及?是否在QQ群聊中看到别人撤回消息时感到好奇却无从得知?在数字沟通成为日常的今天,那些被撤回的消息可能包含着工作安排、重要通知或珍贵回忆。好消息是,现在有一个开源解决方案能让你彻底告别这些遗憾——RevokeMsgPatcher,一款专为Windows平台设计的防撤回补丁工具,能够让你永久保存微信、QQ、TIM等即时通讯软件中被撤回的消息。 ## 🎯

gitblog_00370的博客 1056

一网打尽身份验证与授权:深入剖析ASP.NET Core Identity在C#中的全方位实战应用

ASP.NET Core Identity 是 Microsoft 提供的一个强大且可扩展的身份验证和授权框架,用于构建基于用户账户、角色和权限的Web应用程序。它提供了用户注册、登录、密码管理、多因素认证、角色分配、授权等功能,与ASP.NET Core框架深度集成,简化了安全相关的开发工作。通过上述代码示例和注释,展示了如何安装配置Identity、自定义用户实体与数据库上下文、实现用户注册登录、管理角色与用户角色关系,以及如何使用授权策略保护应用程序资源。,并指定用户和角色类型以及主键类型。

java专栏 1526

Windows防撤回工具RevokeMsgPatcher:如何快速实现微信QQ消息防撤回功能

你是否曾经因为错过重要的工作通知而后悔不已?是否在群聊中看到别人撤回消息时充满好奇却无从得知?在即时通讯成为主流的今天,消息撤回功能虽然保护了隐私,却也带来了信息缺失的困扰。好消息是,RevokeMsgPatcher这款开源工具可以让你彻底告别这些遗憾,实现微信、QQ、TIM等主流通讯软件的防撤回功能。 ## 为什么你需要消息防撤回功能? 在日常工作和生活中,我们经常遇到这样的情况:领导在微信

gitblog_01144的博客 981

UNet改进(23):如何用SLCAM模块提升UNet的分割性能

本文提出一种改进的UNet架构,通过引入轻量化注意力模块(SLCAM)增强医学图像分割性能。SLCAM整合了通道和空间双重注意力机制:通道注意力采用全局池化和共享MLP学习通道权重,空间注意力通过7×7卷积捕捉上下文信息。网络在传统UNet基础上,在每个下采样和上采样块后加入SLCAM模块,并保持跳跃连接结构。实验表明,该方法能自适应聚焦重要特征,在不显著增加计算负担的情况下提升分割精度,特别适用于医学图像等需精确边界的场景。未来可探索三维注意力、动态参数调整等改进方向。

2501_91516851的博客 438

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

5分钟搞定微信QQ防撤回:让撤回的消息无处可逃

还在为错过重要信息而烦恼吗?每次看到"对方已撤回一条消息"是不是让你心痒难耐?RevokeMsgPatcher 这款 Windows 神器,能帮你彻底解决这个问题。无论是工作群里的重要通知,还是朋友间的有趣对话,有了这款工具,所有撤回的消息都会原形毕露,让你不再错过任何精彩内容。 ## 🎯 三大实用场景:你的聊天记录守护神 ### 场景一:工作沟通防遗漏 想象一下,领导在群里发了一条重要通知

gitblog_00701的博客 677

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

终极防撤回指南:5分钟快速修复微信QQ消息撤回功能

你是否遇到过这样的尴尬场景:同事在微信群里发了一条重要的项目需求,然后迅速撤回;朋友分享了一个有趣的链接,转眼间就消失了;客户发来关键的修改意见,却在你看到之前就撤回了?😅 RevokeMsgPatcher 就是为解决这些问题而生的 Windows 平台工具,让你轻松实现微信、QQ、TIM 三大主流通讯软件的防撤回功能。这款开源工具通过智能分析软件内部逻辑,自动应用补丁,让你不再错过任何重要信息

gitblog_01082的博客 1051

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

微信QQ消息防撤回终极指南:告别“对方已撤回“的遗憾时刻

你是否曾因错过重要信息而感到遗憾?当同事撤回工作通知、朋友撤回有趣分享、客户撤回关键需求时,那种"对方已撤回"的提示总是让人无奈。今天,我将为你介绍一款开源神器——RevokeMsgPatcher,它能让你彻底告别信息丢失的烦恼,完整保存每一条重要消息。 RevokeMsgPatcher是一款专为Windows平台设计的微信、QQ、TIM防撤回补丁工具,通过智能修改系统文件实现消息防撤回功能,同

gitblog_00809的博客 777

微信QQ消息撤回太烦人?这款开源工具让你“撤回无效“

你是否也曾经历过这样的尴尬时刻?工作群里老板发的重要通知、朋友分享的搞笑段子、客户发来的关键需求,刚看到还没来得及细看,对方就撤回了,只留下那句让人心痒痒的"对方已撤回一条消息"。每次看到这句话,是不是都恨不得有个时光倒流功能?今天我要给你介绍一个开源神器——RevokeMsgPatcher,它能让PC版微信、QQ、TIM的撤回功能彻底"失效",从此不再错过任何重要信息! ## 场景痛点:那些年

gitblog_00349的博客 471

Windows防撤回终极指南:三分钟搞定微信QQ撤回消息保护

你是否曾经遇到过这样的尴尬时刻?朋友发来重要信息,你还没来得及看,对方就撤回了。工作群里的重要通知,你刚要点开查看,却发现"对方已撤回一条消息"。这种让人抓狂的体验,在Windows平台的微信、QQ和TIM用户中屡见不鲜。今天,我要为你介绍一款解决这个痛点的神奇工具——RevokeMsgPatcher,这是一款专为Windows用户设计的PC版微信/QQ/TIM防撤回补丁,让你再也不错过任何重要信

gitblog_00735的博客 617

终极指南:如何用RevokeMsgPatcher轻松实现微信/QQ/TIM防撤回功能

还在为错过重要消息而烦恼吗?当别人撤回消息时,你是否总是充满好奇?今天我要介绍一款神器——RevokeMsgPatcher,这是一款专门为Windows平台设计的微信、QQ、TIM防撤回补丁工具。无论是工作群里的重要通知,还是朋友间的有趣对话,有了这个工具,你都能完整保存,不再错过任何信息。本文将为你提供完整的RevokeMsgPatcher防撤回补丁使用指南,从原理到实操,一步步教你如何安装和使

gitblog_00432的博客 327

RevokeMsgPatcher终极指南:如何在Windows上轻松实现微信QQ防撤回与多开

你是否曾经因为朋友撤回重要消息而感到困扰?或者因为需要同时管理多个微信账号而频繁切换?RevokeMsgPatcher正是解决这些痛点的完美方案。这款Windows平台下的微信QQ防撤回工具不仅能让你永久保留所有消息,还支持微信多开功能,彻底告别消息丢失和账号切换的烦恼。 ## 为什么你需要这个工具?🔍 在日常即时通讯中,消息撤回功能虽然保护了发送者的隐私,但也给接收者带来了诸多不便。想象一

gitblog_00524的博客 218

终极防撤回解决方案:微信QQ消息防撤回补丁完整使用指南

在日常使用微信、QQ等社交软件时,你是否经常遇到重要消息被对方撤回的尴尬?无论是工作沟通中的关键信息,还是朋友间的有趣对话,一旦被撤回就再也无法查看。RevokeMsgPatcher作为一款强大的PC版微信/QQ/TIM防撤回补丁工具,正是解决这一痛点的终极方案。本指南将详细介绍如何快速安装和使用这款实用工具,让你从此不再错过任何重要信息,轻松实现消息防撤回功能。 ## 为什么需要防撤回补丁?

gitblog_00981的博客 455

Windows防撤回神器:RevokeMsgPatcher让微信QQ消息永不消失

你是否经常在微信或QQ聊天时,重要消息被对方撤回却来不及查看?RevokeMsgPatcher正是解决这一痛点的Windows防撤回工具,它能让你轻松实现微信、QQ、TIM等主流聊天软件的消息防撤回功能,同时支持微信多开,工作生活两不误。 ## 一、为什么你需要这个Windows防撤回工具? ### 1.1 消息撤回的常见困扰 在日常沟通中,消息撤回功能虽然方便纠错,但也带来了不少困扰:

gitblog_00877的博客 990

如何用RevokeMsgPatcher彻底解决消息撤回困扰:Windows用户必备的完整防撤回方案

你是否曾经在重要的聊天对话中,眼睁睁看着关键信息被撤回却无能为力?无论是工作群里的重要通知、朋友间的有趣对话,还是客户发送的宝贵建议,一旦被撤回就仿佛从未存在过。在Windows平台上,有一款名为RevokeMsgPatcher的专业工具,能够让你永久保留所有聊天记录,不再错过任何重要信息。本文将为你全面解析这款工具的安装使用、技术原理和实用技巧。 ## 痛点共鸣:消息撤回的普遍困扰 在日常的

gitblog_00758的博客 335
上一篇: Git 基础操作手册:轻松掌握常用命令
下一篇: 打造干净的Git历史:本地仓库整理操作详解
Lion 莱恩呀
Lion 莱恩呀 优快云实力新星 优快云实力新星 领域专家: 数据库技术领域 领域专家: 数据库技术领域
博客等级 码龄8年 7万+粉丝 638原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion 莱恩呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值