git基础-撤销操作

news2024/9/23 22:49:39

撤销操作

在任何阶段,我们都可能希望撤消某些操作。在这里,我们将回顾一些基本工具,用于撤消之前所做的更改。操作要谨慎,因为这些撤销可能无法修复。这是 Git 中为数不多的几个领域之一由于操作不当,导致丢失一些工作。

  • 一种情况是当提交的太早,可能忘记添加某些文件
  • 另一种情况是弄乱了提交消息

如果想重新提交该提交,请执行以下操作:

补充忘记的额外更改,将它们暂存,然后使用 --amend 选项再次提交。

$ git commit --amend

  • 只更改提交消息

该命令将使用暂存区域进行提交。如果自上次提交以来没有进行任何更改(例如,在上一次提交后立即运行此命令),那么快照将完全相同,要更改的只是提交消息。

同样的提交消息编辑器会启动,但它已经包含了上一次提交的消息。可以像往常一样编辑消息,但它会覆盖之前的提交。

  • 追加新的更改文件

举例来说,如果提交后意识到忘记将一个文件中的更改暂存,而又希望将其添加到此次提交中,可以执行以下操作:

$ git commit -m 'Initial commit'

$ git add forgotten_file

$ git commit --amend

最终得到了一个单独的提交 — 第二次提交取代了第一次提交的结果。

重要的是要理解,当修改最后一次提交时,并不是在修复它,而是完全用一个新的、改进过的提交替换它,这样就将旧的提交推开并将新的提交放在了它的位置。实际上,就好像以前的提交从未发生过,并且不会出现在仓库历史记录中。

修改提交的明显价值在于对最后一次提交进行微小改进,而不会在您的仓库历史记录中添加形式为“哎呀,忘记添加文件”或“糟糕,修复上次提交中的拼写错误”等提交消息,从而使仓库历史记录变得混乱。

只修改仍然在本地且尚未推送到其他地方的提交。修改先前已经推送的提交并强制推送分支会给合作者带来问题。

取消已暂存文件的暂存

通过git reset撤销

针对git 2.23之前的版本,示例中代码块部分粘自git book,没有进行实际操作

接下来的两个部分演示了如何处理暂存区和工作目录中的更改。好处是,用于确定这两个区域状态的命令还会提醒如何撤消对它们的更改。

例如,假设更改了两个文件,并希望将它们作为两个单独的更改进行提交,但不小心输入了 git add * 并将它们都暂存了。如何取消其中一个的暂存?git status 命令会提醒:

$ git add *

$ git status

On branch master

Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README

modified:   CONTRIBUTING.md

在“Changes to be committed”文本的正下方,它说要使用 git reset HEAD <file>…​ 来取消暂存。因此,让我们遵循这个建议来取消暂存 CONTRIBUTING.md 文件。

$ git reset HEAD CONTRIBUTING.md

Unstaged changes after reset:

M CONTRIBUTING.md

$ git status

On branch master

Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README

Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

这个命令有点奇怪,但它有效。CONTRIBUTING.md 文件被修改,但再次未暂存。

的确,git reset命令可能是一个危险的命令,特别是如果提供了 --hard 标志。然而,在上述描述的情况下,工作目录中的文件不会受到影响,因此相对安全。

就目前而言,关于 git reset 命令,需要知道的就是这个神奇的调用方式。

将已修改的文件还原

如果意识到不想保留对 CONTRIBUTING.md 文件的更改,怎样才能轻松地将其还原 —— 将其恢复为上次提交时的样子(或者最初克隆时的样子,或者将其放入工作目录的方式)?幸运的是,git status 也告诉了如何做到这一点。在最后一个示例输出中,未暂存区的状态看起来像这样:

Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   CONTRIBUTING.md

它相当明确地告诉如何丢弃所做的更改。让我们按照它的提示来做:

$ git checkout -- CONTRIBUTING.md

$ git status

On branch master

Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README

重要的是要理解,git checkout -- <file> 是一个危险的命令。对该文件所做的任何本地更改都将消失 —— Git 只是用最后暂存或提交的版本替换了该文件。除非绝对确定您不需要那些未保存的本地更改,否则永远不要使用此命令。

如果想保留对该文件所做的更改,但又需要暂时将其搁置一边,我们将在《Git 分支》中介绍存储和分支;这些通常是更好的方法。

请记住,Git 中提交的任何内容几乎都可以恢复。即使是在已删除的分支上的提交,或者是在使用 --amend 命令覆盖的提交,都可以恢复(请参阅数据恢复以进行数据恢复)。但是,任何提交的丢失内容可能永远不会再见。

通过git restore撤销

Git 版本 2.23.0 引入了一个新的命令:git restore。它基本上是我们刚刚介绍过的 git reset 的替代品。从 Git 版本 2.23.0 开始,Git 将在许多撤消操作中使用 git restore 而不是 git reset。

让我们重新追溯我们的步骤,使用 git restore 而不是 git reset 来撤销操作。

在“Changes to be committed”文本的正下方,它说要使用 git restore --staged <file>…​ 来取消暂存。因此,让我们按照这个建议来取消暂存text.txt 文件:

Text.txt文件已被修改,但未暂存。

使用 git restore 取消对已修改文件的修改

重要的是要理解,git restore <file> 是一个危险的命令。对该文件所做的任何本地更改都将消失 —— Git 只是用最后暂存或提交的版本替换了该文件。除非绝对确定不需要那些未保存的本地更改,否则绝对不要使用此命令。

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

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

相关文章

Webpack生成企业站静态页面 - 项目搭建

现在Web前端流行的三大框架有Angular、React、Vue&#xff0c;很多项目经过这几年的洗礼&#xff0c;已经都 转型使用这三大框架进行开发&#xff0c;那为什么还要写纯静态页面呢&#xff1f;比如Vue中除了SPA单页面开发&#xff0c;也可以使用nuxt.js实现SSR服务端渲染&#x…

PyTorch深度学习:如何实现遥感影像的自动化地物分类?

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

详解 net user

net user 是 Windows 操作系统自带的一个命令行工具&#xff0c;用于管理和查询本地用户账户信息。在域环境中&#xff0c;它可以用于管理本地用户账户&#xff0c;但对域用户账户的操作能力有限&#xff0c;尤其是查看域账户锁定状态等功能。以下是 net user 命令的详解&#…

国内IP节点更换攻略,一键解决烦恼

在如今的互联网时代&#xff0c;网络已经成为人们生活中不可或缺的一部分。而对于许多网民来说&#xff0c;网络速度的快慢直接关系到他们的上网体验。在国内&#xff0c;很多用户常常遇到一个问题&#xff0c;那就是网络速度不稳定。有时候可以流畅地上网&#xff0c;有时候却…

2024/03/25(C++·day1)

一、思维导图 二、练习 练习一 定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream&g…

2024第14届深圳国际电子元器件展览会

2024第14届深圳国际电子元器件展览会 The 14th Shenzhen International Electronic Components Exhibition in 2024 时间&#xff1a;2024年08月28-30日 地点&#xff1a;深圳国际会展中心&#xff08;新馆&#xff09; 预订以上展会详询陆先生 I38&#xff08;前三位&…

定制化区块链交易所开发:Dapp、DeFi和IDO的全方位解决方案

随着区块链技术的不断发展&#xff0c;区块链交易所已经成为数字资产交易的主要场所之一。然而&#xff0c;由于不同项目的需求和特点各不相同&#xff0c;通用的交易所往往无法满足所有的需求。因此&#xff0c;定制化区块链交易所的需求逐渐增加&#xff0c;以满足不同项目的…

【随笔】Git -- 基本概念和使用方式(五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

用友U8Cloud FileServlet 任意文件读取漏洞复现(含nuclei-poc)

免责声明 由于传播、利用本CSDN所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担! 一、产品介绍 用友U8Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。…

Midjourney AI绘图工具介绍及使用

介绍 Midjourney是一款目前被誉为最强的AI绘图工具。只要输入想到的文字&#xff0c;就能通过人工智能产出相对应的图片。 官网只是宣传和登录入口&#xff0c;提供个人主页、订阅管理等功能&#xff0c;Midjourney实际的绘画功能&#xff0c;是在另外一个叫discord的产品中实…

青创智通——物联网数据存储的关键点是什么?

工业物联网解决方案-工业IOT-青创智通 随着物联网技术的迅速发展&#xff0c;海量的设备数据产生了前所未有的挑战和机遇。数据存储作为物联网系统中的核心环节&#xff0c;对于保障数据安全、提高数据处理效率以及实现数据价值挖掘具有至关重要的作用。本文将围绕物联网数据存…

排序与分页

文章目录 一、 排序1.1 排序规则1.2 单列排序1.3 多列排序 二、分页2.1 实现规则2.2 拓展 一、 排序 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排…

第四讲:隐语SecretFlow安装部署

SecretFLow安装 环境要求&#xff1a; Python>3.8&#xff1b; 操作系统&#xff1a;CentOS7&#xff0c;Anolis8&#xff0c;Ubuntu 18.04/20.04&#xff0c;macOS11.1&#xff0c;WSL2&#xff1b; 资源&#xff1a;>8核16GB 安装包&#xff1a;SecretFLow, SecretF…

C++中using namespace std的作用以及vector数组的使用

C中using namespace std的作用以及vector数组的使用 本文为自我学习记录&#xff0c;主要包括C中 using namespace std的作用vector数组的使用 文章目录 C中using namespace std的作用以及vector数组的使用一、 using namespace std二、vector数组2.1 使用 vector<vector<…

Scikit-Learn K近邻分类

Scikit-Learn K近邻分类 1、K近邻分类1.1、K近邻分类及原理1.2、超参数K1.3、K近邻分类的优缺点2、Scikit-Learn K近邻分类2.1、Scikit-Learn K近邻分类API1、K近邻分类 K近邻是一种常用的分类算法。K近邻在机器学习知识结构中的位置如下: 1.1、K近邻分类及原理 K近邻(K-Near…

SAP ABAP-BOPF基础训练-01简介与架构

1. 介绍-Introduction ① BOPF是什么&#xff1f;BOPF(the Business Object Processing Framework)&#xff1a;业务对象处理框架 提供了一种增量和模块化的方法&#xff0c;以符合企业面向服务体系结构(eSOA)的方式实现业务对象&#xff1b; 部分平台基础层&#xff0c;软件组…

利用flag信号解决LeetCode题库第394题字符串解码问题

394. 字符串解码 中等 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有…

Vue 发送Ajax请求多种方式

1. 发送ajax请求的方式 方案一&#xff1a;jq 的ajax&#xff08;在 vue 中不推荐同时使用&#xff09;方案二&#xff1a;js 原始官方 fetch方法方案三&#xff1a;axios 第三方 2. 方案一 后端视图函数 from rest_framework.viewsets import ViewSet from rest_framework…

HTML(二)

一、表格标签 1.1表格的主要作用 表格主要用于显示、展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理。 1.2 表格的…