【Git】修改文件版本回退撤销修改删除文件

文章目录

    • 修改文件
    • 版本回退
      • git reset语法规则
      • 注意
    • 撤销修改
      • 情况1:工作区的代码还未add
      • 情况2:工作区的代码已经add 但未commit
      • 情况3:工作区的代码已经add 并且已经 commit
    • 删除文件

修改文件

Git⽐其他版本控制系统设计得优秀,Git跟踪并管理的是修改,不是文件

何为修改?

新增了⼀⾏/删除了⼀⾏/更改了某些字符/删了⼀些⼜加了⼀些/创建⼀个新⽂件 也算修改


比如:将ReadMe⽂件进⾏⼀次修改

image-20230614154405022

那么此时仓库中的ReadMe和我们⼯作区的ReadMe是不同的,可以使用git status查看仓库的状态,查看在你上次提交之后是否有对⽂件进⾏再次修改

image-20230614154458524

上⾯的结果告诉我们,ReadMe被修改过了,但还没有完成添加与提交。⽬前,我们只知道⽂件被修改了,如果能知道具体哪些地⽅被修改了就更好了。

  • 可以使用git diff 文件名命令显示暂存区和工作区文件的差异,显示的格式正是Unix通用的diff格式
  • 也可以使用 git diff HEAD -- 文件名:查看版本库和⼯作区文件的区别

image-20230614154657074


此时git add之后,然后再使用git commit

image-20230614154856026


版本回退

Git能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现之前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能。可以使用git reset命令用于版本回退,可以指定退回某⼀次提交的版本

注意:回退”本质是要将版本库中的内容进行回退,工作区或暂存区是否回退由命令参数决定 ,也就是说不管使用什么参数,版本库的内容是一定会回退的

git reset语法规则

 git reset [--soft 或者 --mixed 或者 --hard] [HEAD]

--mixed:是默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容⼯作区⽂件保持不变

--soft:该选项对于⼯作区和暂存区的内容都不变只是将版本库回退到某个指定版本

--hard:该选项将暂存区与⼯作区都退回到指定版本

  • 注意!!!!!:如果⼯作区有未提交的代码时不要使用--hard选项,因为此时工作区会回滚,而没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重

HEAD说明:

  • 可直接写成commit id(版本号),表示指定退回的版本
  • HEAD 表示当前master最新版本

方式1:

  • HEAD^ 表示上⼀个版本

  • HEAD^^ 上上⼀个版本

  • 以此类推…

方式2:

  • HEAD~0表示当前版本
  • HEAD~1表示上⼀个版本
  • 以此类推…

例子:更新3个版本的test文件,并分别进⾏3次提交

image-20230614162528700

查看历史提交记录

image-20230614162332755

假设在提交完version3后,发现version3编写错误,想回退到version2,此时的做法为:

  • 在这⾥希望的是将工作区的内容也回退到到version2版本,所以需要使用--hard选项,

image-20230614163658800

此时test文件的内容已经回退到version2了,再次⽤ git log 查看⼀下提交⽇志,发现 HEAD 指向了version2

image-20230614163803409

但是现在如果我后悔了,想再回到version3怎么办? 此时可以继续使⽤git reset命令回退到version3版本,但是必须要拿到version3的版本号(commit id)去指定回退的版本,但是此时使用git log并不能打印出version3的版本号,运⽓好的话我们可以从终端上去找找之前的记录,运⽓不好的话version3的版本号已经被搞丢了

git提供了一个git reflog命令用户记录本地的每⼀次命令,就可以很方便的找到所有操作记录了

image-20230614164230085

此时这个 4927c33就是version3的版本号的一部分,git回退的时候也可以使用部分的来代表目标版本

image-20230614164430423


注意

Git的版本回退速度非常快,因为Git在内部有个指向当前分⽀master的HEAD指针,在.git目录下的 refs/heads/master文件当中保存当前master分支的最新的版本号(commit id),当我们进行回退版本的时候,Git仅仅是给refs/heads/master存储一个特定的版本号,可以简单理解成如下⽰意图:

image-20230614171335147


撤销修改

例如:如果我们在我们的⼯作区写了很⻓时间代码,越写越写不下去,觉得⾃⼰写的实在是垃圾代码,想恢复到上⼀个版本

情况1:工作区的代码还未add

此时可以直接删掉你⽬前在⼯作区新增的代码。但是可能写了3天⼀直都没有提交代码,此时就很难删除新增的代码,当然了也可以使用git diff filename看看差别再删,但是这样⼜要花3天时间删代码了,并且很⼤的概率还会改出bug

解决办法:可以使用git checkout -- 文件名 命令让⼯作区的对应文件回到最近⼀次add 或者 commit时的状态切记:此时的 --不能丢弃,否则该命令就是其它含义

image-20230614202616044

情况2:工作区的代码已经add 但未commit

工作区的代码已经add到暂存区当中 ==>此时可以使用<font color='blue'>git reset命令进行版本回退,

  • 第一步:将暂存区的内容退回为指定的版本内容,而但⼯作区⽂件保持不变 ==>使用--mixed选项,而--mixed 是默认参数,所以可以省略
  • 第二步:丢弃当前工作区的代码,回到最近⼀次add 或者 commit的状态

第一步:使用git reset --mixed file回退暂存区的版本内容

image-20230614203112093

第二步:使用git check -- 文件名:丢弃该文件在⼯作区中的修改

image-20230614203227980

情况3:工作区的代码已经add 并且已经 commit

此时:可以使用 git reset --hard HEAD^暂存区与⼯作区都回退到上一个版本,而版本库是肯定会回退的。此时HEAD^ :表示上⼀个版本。当然这是有前提的:还没有把本地版本库推送到远程,才能回退到上一个版本。并且使用git reset的时候,版本库是肯定会回退的

image-20230614203606157


image-20230614203922772

删除文件

对工作区的修改包括:在工作区新增, 删除,修改文件

下面例子的前提是: file文件已经add 和 commit,如果一个文件还没有进行add和commit就直接删除,那就不可能恢复了!

例子:删除file文件

直接使用rm删除是没有作用的, git status会⽴刻告诉你哪些⽂件被删除了

image-20230614204054809

此时⼯作区和版本库的内容就不⼀致了,要删文件,除了要删⼯作区的⽂件,还要清除版本库的⽂件。当然了,有两种情况:

  • case1:不小心删除了

此时可以使用git checkout --文件名进行恢复,让⼯作区的对应文件回到最近⼀次add 或者 commit时的状态

image-20230614204236148

  • case2:确实要从版本库中删除该⽂件

使用rm只删除了⼯作区的⽂件,此时可以使用命令:git rm 文件名:将文件从暂存区和工作区中删除,并且执行命令之后还需要再次commit

image-20230614204551261

现在,⽂件就从版本库和暂存区中被删除了

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

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

相关文章

【Solr】Solr搜索引擎使用

文章目录 一、什么是Solr?二 、数据库本身就支持搜索啊,干嘛还要搞个什么solr?三、如果我们想要使用solr那么首先我们得安装它 一、什么是Solr? 其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊 ! 每当你想买自己喜欢的东东时,你可能会打开某…

chatgpt 接口使用(一)

使用api实现功能 参考链接&#xff1a;https://platform.openai.com/examples 安装库&#xff1a; pip3 install openai 例如&#xff1a; import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…

jenkins 配置git

在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录&#xff08;非源码安装直接用yum 安装的&#xff09; which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…

SpringBoot多环境开发-配置文件

在Spring Boot中进行多环境开发时&#xff0c;你可以使用配置文件来定义每个环境的属性。Spring Boot提供了一种方便的方式来管理和加载不同环境的配置文件。 以下是一些常见的配置文件命名约定&#xff1a; application.properties: 默认的配置文件&#xff0c;适用于所有环…

VS2022和QT混合编程打包发布程序

1.在开始菜单输入 CMD 找到 Qt5.15.2(MSVC 64-bit) 2.输入windeployqt exe所在路径 3.运行完毕后&#xff0c;双击打开exe文件&#xff0c;可能会报错&#xff0c;缺少相关的dll,找到缺少的dll拷贝到运行文件夹下即可。

【iOS】KVC KVO 总结

文章目录 KVC1. KVC赋值原理 setValue:forKey:2. KVC取值原理 valueForKey:3. 注意4. KVC的批量存值和取值 KVO 使用1. KVO的介绍2. KVO监听的步骤注册监听监听实现移除监听例子 3. KVO的传值4. KVO注意5. KVO的使用场景 KVO原理1. KVO的本质是改变了setter方法的调用2. _NSSet…

【图论】树上差分(边差分)

一.简介 其实点差分和边差分区别不大。 点差分中&#xff0c;d数组存储的是树上的节点 边差分中&#xff0c;d数组存储的是当前节点到父节点的那条边的差分值。 指定注意的是&#xff1a;边差分中因为根连的父节点是虚点&#xff0c;所以遍历结果时应当忽略&#xff01; 二…

【Rust学习 | 基础系列3 | Hello, Rust】编写并运行第一个Rust程序

文章目录 前言一&#xff0c;创建项目二&#xff0c;两种编译方式1. 使用rustc编译器编译2. 使用Cargo编译 总结 前言 在开始学习任何一门新的编程语言时&#xff0c;都会从编写一个简单的 “Hello, World!” 程序开始。在这一章节中&#xff0c;将会介绍如何在Rust中编写并运…

页面访问控制远程仓库

页面访问权限控制 什么是jwt身份认证 在前后端分离模式的开发中&#xff0c;服务器如何知道来访者的身份呢&#xff1f; 在登录后&#xff0c;服务器会响应给用户一个 令牌 &#xff08;token&#xff09;令牌中会包括该用户的id等唯一标识浏览器收到令牌后&#xff0c;自己…

Yolov8训练自己的数据集合(最新实验数据)

一、安装环境 笔者环境如下&#xff1a; win10 anaconda python3.8二、clone代码 地址如下&#xff0c;可以直接使用git命令进行clone,也可以直接去网站下载 git clone https://github.com/ultralytics/ultralytics代码目录如下所示 三、安装必要的库 其实这里比较重要的是…

python速成之循环分支结构学习

循环结构 应用场景 我们在写程序的时候&#xff0c;一定会遇到需要重复执行某条或某些指令的场景。例如用程序控制机器人踢足球&#xff0c;如果机器人持球而且还没有进入射门范围&#xff0c;那么我们就要一直发出让机器人向球门方向移动的指令。在这个场景中&#xff0c;让…

【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?

文章目录 前言声明和初始化扩容时机源码分析go1.17go1.18内存对齐 总结 前言 在 Go 语言中&#xff0c;有一个很常用的数据结构&#xff0c;那就是切片&#xff08;Slice&#xff09;。 切片是一个拥有相同类型元素的可变长度的序列&#xff0c;它是基于数组类型做的一层封装…

基于IAP的嵌入式系统在线编程设计(学习)

摘要&#xff1a;为了实现嵌入式系统程序的在线升级&#xff0c;提出一种基于IAP在线编程的程序更新方法。 以STM32L431控制器为例&#xff0c;该方法对控制器的片内FLASH进行区域划分&#xff0c;分别存放引导程序、执行程序及待更新程序。 系统通过运行引导程序将待更新程序…

手把手教你使用stable diffusion生成自己的艺术二维码

艺术二维码制作指南 导读midjourneystable diffusion 环境准备安装stable diffusion webuisd-webui-qrcode-toolkit安装 草料二维码模型准备QR PatternQR Code MonsterIoC Lab Control Net 艺术二维码制作1. 二维码信息提取2. 使用QR Tookit生成二维码3. 下载二维码图片4. prom…

大数据Flink(五十):流式计算简介

文章目录 流式计算简介 一、数据的时效性 二、流式计算和批量计算

【手机】三星手机刷机解决SecSetupWizard已停止

三星手机恢复出厂设置之后&#xff0c;出现SecSetupWizard已停止的解决方案 零、问题 我手上有一部同学给的三星 GT-S6812I&#xff0c;这几天搞了张新卡&#xff0c;多余出的卡就放到这个手机上玩去了。因为是获取了root权限的&#xff08;直接使用KingRoot就可以&#xff0…

数据安全:DataSecurity Plus

随着数字化时代的来临&#xff0c;数据成为了企业和个人生活中不可或缺的一部分。然而&#xff0c;数据的增长和广泛应用也带来了许多安全挑战。数据泄露、黑客攻击和恶意软件成为了威胁数据安全的主要因素。在这个充满风险的环境中&#xff0c;DataSecurity Plus作为一种强大的…

一起学算法(选择排序篇)

距离上次更新已经很久了&#xff0c;以前都是非常认真的写笔记进行知识分享&#xff0c;但是带来的情况并不是很好&#xff0c;一度认为发博客是没有意义的&#xff0c;但是这几天想了很多&#xff0c;已经失去了当时写博客的初心了&#xff0c;但是我觉得应该做点有意义的事&a…

测试常见前端bug

目录 协作 测试方法 标签&#xff1a;标签 内容/ref/ 判断 arr&&arr.length 交互 样式不生效&#xff1a;devtools查找&#xff0c;编译前的标签&#xff0c;运行时不一定存在 可交互的需要提示 hover样式 没有交互逻辑&#xff0c;就不要设置交互 无法交互…

为 Google Play 即将推出基于区块链的内容政策做好准备

作者 / Joseph Mills, Group Product Manager, Google Play 作为一个平台&#xff0c;Google Play 一直致力于帮助开发者将创新理念变为现实。Google Play 上托管了许多和区块链相关的应用&#xff0c;我们深知合作伙伴们希望扩展这些应用&#xff0c;并利用 NFT 等代币化数字资…