Git企业开发级讲解(三)

news2024/12/24 9:11:11

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、版本回退
    • 1、内容
    • 2、演示
  • 二、撤销修改
    • 1、情况⼀:对于⼯作区的代码,还没有 add
    • 2、情况⼆:已经 add ,但没有 commit
    • 3、情况三:已经 add ,并且也 commit
  • 三、删除文件
  • 总结


一、版本回退

1、内容

之前我们也提到过,Git 能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现之前前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能了。
执⾏ git reset 命令⽤于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定:

git reset 命令语法格式为: git reset [–soft | --mixed | --hard] [HEAD]

  1. –mixed 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内。
  2. –soft 参数对于⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
  3. –hard 参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重。
  4. HEAD 说明:
    可直接写成 commit id,表⽰指定退回的版本
    HEAD 表⽰当前版本
    HEAD^ 上⼀个版本
    HEAD^^ 上上⼀个版本
    以此类推…
  5. 可以使⽤ 〜数字表⽰:
    HEAD~0 表⽰当前版本
    HEAD~1 上⼀个版本
    HEAD^2 上上⼀个版本
    以此类推…

2、演示

为了便于表述,⽅便测试回退功能,我们先做⼀些准备⼯作:更新3个版本的 ReadMe,并分别进⾏3次提交,如下所⽰:

第一次

在这里插入图片描述

第二次

在这里插入图片描述

第三次

在这里插入图片描述

查看历史提交记录

在这里插入图片描述

现在,如果我们在提交完 add 3 后, 发现 add 3 编写错误,想回退到add 2,重新基于 add 2 开始编写。由于我们在这⾥希望的是将⼯作区的内容也回退到 add2 版本,所以需要⽤到 --hard 参数,⽰例如下:

在这里插入图片描述

到这⾥⼀般回退功能就演⽰完了,但现在如果我后悔了,想再回到 add 3 怎么办?我们可以继续使⽤ git reset 命令,回退到 add 3 版本,但我们必须要拿到 add 3 的 commit id 去指定回退的版本。
但我们看到了 git log 并不能打印出 add 3 的 commit id ,运⽓好的话我们可以从终端上去找找之前的记录,运⽓不好的话 commit id 已经被我们搞丢了=。=
Git 还提供了⼀个 git reflog 命令能补救⼀下,该命令⽤来记录本地的每⼀次命令.

在这里插入图片描述

这样,你就可以很⽅便的找到你的所有操作记录了,但 46b4977 这个是啥东西?这个是 add 3 的 commit id 的部分。没错,Git 版本回退的时候,也可以使⽤部分 commit id 来代表⽬标版本。⽰例如下:

在这里插入图片描述
可往往是理想很丰满,现实很⻣感。在实际开发中,由于⻓时间的开发了,导致 commit id 早就找不到了,可突然某⼀天,我⼜想回退到 version3,那该如何操作呢?貌似现在不可能了。。。
值得说的是,Git 的版本回退速度⾮常快,因为 Git 在内部有个指向当前分⽀(此处是master)的HEAD 指针, refs/heads/master ⽂件⾥保存当前 master 分⽀的最新 commit id 。当我们在回退版本的时候,Git 仅仅是给 refs/heads/master 中存储⼀个特定的version,可以简单理解:
在这里插入图片描述


二、撤销修改

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

1、情况⼀:对于⼯作区的代码,还没有 add

你当然可以直接删掉你⽬前在⼯作区新增的代码,像这样:
新增代码
在这里插入图片描述
直接删除代码的话:
⾟亏我们⼯作效率不⾼,才写了⼀⾏代码就发现不⾏了,要是你写了3天,⼀直都没有提交,该怎么删掉呢?你⾃⼰都忘了⾃⼰新增过哪些,有同学说,我可以 git diff xxx ⼀下,看看差别在删啊,那你肯定⼜要花3天时间删代码了,并且很⼤的概率还会改出bug。⼀周过去了,你怎么向你的⽼板交代呢?
Git 其实还为我们提供了更好的⽅式,我们可以使⽤ git checkout – [file] 命令让⼯作区的⽂件回到最近⼀次 add 或 commit 时的状态。 要注意 git checkout – [file] 命令中的 – 很重要,切记不要省略,⼀旦省略,该命令就变为其他意思了,后⾯我们再说。⽰例如下:
恢复到上⼀次 add 或 commit
在这里插入图片描述

2、情况⼆:已经 add ,但没有 commit

向ReadMe中新增⼀⾏代码
在这里插入图片描述
add 存⼊暂存区
在这里插入图片描述
让我们来回忆⼀下学过的 git reset 回退命令,该命令如果使⽤ --mixed 参数,可以将暂存区的内容退回为指定的版本内容,但⼯作区⽂件保持不变。那我们就可以回退下暂存区的内容了!!!
⽰例如下:
在这里插入图片描述
在这里插入图片描述
恢复了!!!

3、情况三:已经 add ,并且也 commit

不要担⼼,我们可以 git reset --hard HEAD^ 回退到上⼀个版本!不过,这是有条件的,就是你还没有把⾃⼰的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后⾯会讲到远程版本库,⼀旦你推送到远程版本库,你就真的惨了……
向ReadMe中新增⼀⾏代码
在这里插入图片描述
提交
在这里插入图片描述
回退
在这里插入图片描述


三、删除文件

在 Git 中,删除也是⼀个修改操作,我们实战⼀下, 如果要删除 file5 ⽂件,怎么搞呢?如果你这样做了:
在这里插入图片描述
如果add了,这样直接删除是没有⽤的,反⽽徒增烦恼, git status 命令会⽴刻告诉你哪些⽂件被删除了:

在这里插入图片描述

此时,⼯作区和版本库就不⼀致了,要删⽂件,⽬前除了要删⼯作区的⽂件,还要清除版本库的⽂件。
⼀般⾛到这⾥,有两种可能:
确实要从版本库中删除该⽂件
不⼩⼼删错了

对第⼆种情况,很明显误删,需要使⽤ git 来进⾏恢复,很简单,我们刚学过(删除也是修改):
在这里插入图片描述
对于第⼀种情况,很明显是没有删完,我们只删除了⼯作区的⽂件。这时就需要使⽤ git rm 将⽂件从暂存区和⼯作区中删除,并且 commit :
在这里插入图片描述

现在,⽂件就从版本库中被删除了。


总结

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

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

相关文章

GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain

简介 gem5中的 NoC部分是Garnet实现的,但是Garnet并没有单独的时钟域,而是保持ruby一致,要做noc的DVFS,便是要改ruby的 改电压 #这里只是生成一个随便变量名,存一下值。改是和频率一起的 userssaved_voltage_domain…

【MyBatis】写了 10 年的代码,我最怕写 MyBatis 这些配置,现在有详解了

在使用 mybatis 过程中,当手写 JavaBean和XML 写的越来越多的时候,就越来越容意出错。这种重复性的工作,我们当然不希望做那么多。 还好, mybatis 为我们提供了强大的代码生成--MybatisGenerator。 通过简单的配置,我们…

新版JetBrains ToolBox【Windows】修改应用安装位置

WIndows下新版的JetBrainse ToolBox 无法修改应用安装路径 关闭 ToolBox 应用修改配置文件.settings.json 路径:C:\Users\用户名\AppData\Local\JetBrains\Toolbox "install_location": "xxx",

早晨暖心的早安问候语,祝好心情从清晨开始,愿你享受美好生活每一天!

1、冬天里,重调理;多锻炼,日光浴;早安睡,晚游历;勤开窗,通空气;暖腹背,寒不欺;适滋补,强体力;心乐观,无忧虑;温…

LTD.com再度荣获“2023中国产业数字化技术赋能先锋”

2023年11月17日,由托比网主办的“第十届中国产业数字化大会”在江苏南京顺利召开。作为国内产业数字化领域的年度盛会,会议得到了江苏省商务厅、南京市政府的支持,由南京市商务局主办,南京鼓楼区政府提供特别支持。 会议在精彩的议…

vite+vue3+ts中watch和watchEffct的使用

vitevue3ts中watch和watchEffct的使用 本文目录 vitevue3ts中watch和watchEffct的使用watchrefreactivepropsimmediate组合监听 watchEffect单值多值侦听副作用停止监听 watch vue官方文档:https://cn.vuejs.org/api/reactivity-core.html#watch 可以监听基础类型&…

使用Docker部署Python Flask应用的完整教程

一、引言 Docker是一种开源的容器化平台,可以将应用程序及其依赖项打包成一个独立的容器,实现快速部署和跨平台运行。本文将详细介绍如何使用Docker来部署Python Flask应用程序,帮助开发者更高效地构建和部署应用。 二、准备工作 在开始之前…

Linux CentOS 8(DHCP的配置与管理)

Linux CentOS 8(DHCP的配置与管理) 目录 一、项目介绍二、DHCP服务简介三、DHCP工作原理四、配置DHCP服务4.1 项目配置准备4.2 dhcpd配置文件框架与参数说明4.3 登录客户机验证4.4 客户端IP地址的释放与重新申请4.5 保留特定IP地址 一、项目介绍 当计算…

【C++】容器string的构造函数和迭代器

目录 1 什么是string 2 迭代器 2.1 迭代器的使用 2.2 auto关键字以及代码可读性 3 构造函数 1 什么是string 上图是C官网对于string的解释:string是表示字符序列的对象。 string本质是一个类,位于std的命名空间下,使用前需要包含头文件…

基于乌燕鸥算法优化概率神经网络PNN的分类预测 - 附代码

基于乌燕鸥算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于乌燕鸥算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于乌燕鸥优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

安全知识普及:什么是垃圾邮件和网络钓鱼欺诈

文章目录 什么是垃圾邮件?如何保护您自己免遭垃圾电子邮件和网络钓鱼侵害区分私人和公用电子邮件私人电子邮件公共电子邮件 使用反垃圾邮件过滤器推荐阅读 什么是垃圾邮件? 您的邮箱里经常会出现一些莫名其妙的邮件,而这就是电子形式的垃圾邮…

【STM32】CRC(循环冗余校验)

一、CRC的背景知识 1、什么是CRC (1)CRC(Cyclic Redundancy Check),循环冗余校验 (2)什么是校验,为什么需要校验:数据传输,数据存储过程中需要使用到的 (3)什么是冗余:表示比实际上要传输的数据…

【Unity小技巧】图片使用的一些常见问题

文章目录 前言Button不规则按钮点击空白区域不响应点击事件1. 设置资源参数2. 代码设置按钮Image的alphaHitTestMinimumThreshold3. 解释:4. 效果 Unity Image 原图比例控制方法一 Preserve Aspect1. 设置勾选Preserve Aspect(保持长宽比)&am…

docker删除镜像命令

在Docker中删除镜像的命令是 docker rmi。这个命令用于删除一个或多个Docker镜像。使用这个命令时,你需要指定要删除的镜像的ID或名称。以下是一些常用的用法: 删除单个镜像: docker rmi [IMAGE_ID或REPOSITORY:TAG]例如,如果你知…

【OpenAI开发者大会,全新大模型它来了,价格大跌...】

继今年春天发布 GPT-4 之后,OpenAI 又创造了一个不眠夜。 过去一年,ChatGPT 绝对是整个科技领域最热的词汇。 北京时间 11 月 7 日凌晨 02:00,OpenAI 的首次 DevDay 开发者日活动正式开始。Keynote 主论坛环节由 Sam Altman 主讲并在油管现…

Reflect的作用,target,property,value,receiver代表啥

1.真的proxy let target {name:张三} let handler {get(target,property,receiver){console.log(1,target,2,property,3,receiver)return Reflect.get(target,property,receiver)},set(target,property,value,receiver){console.log(a,target,b,property,c,value,d,receiver)…

vue3安装vue-router

环境 node 18.14.2 yarn 1.22.19 windows 11 vite快速创建vue项目 参考 安装vue-touter 官网 yarn add vue-router4src下新建router文件夹,该文件夹下新建index.ts // router/index.ts 文件 import { createRouter, createWebHashHistory, RouterOptions, Ro…

【139.单词拆分】

目录 一、题目解析二、算法原理三、代码实现 一、题目解析 二、算法原理 三、代码实现 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {int n s.size();unordered_set<string> hash;for (auto x : wordDict) hash.insert(x);…

动态sql行转列

动态sql行转列 介绍案例转之前转之后 注意 介绍 本篇介绍 根据 时间格式化后行转列的案例讲解动态sql案例的初学 案例 --设置一个动态变量 赋予初始值 SET sql NULL;--获取规范化后需要用到的行头列表 SELECT GROUP_CONCAT(CONCAT(--注意1MAX(IF(date ", date, "…

Eclipse使用配置tomcat服务:Server配置

目标&#xff1a; 在Eclipse中&#xff0c;默认会把Web项目放到Eclipse的工作空间下 的.metadata\.plugins\org.eclipse.wst.server.core\tmp0(或者是tmp1)\wtpwebapps\下 &#xff0c;如果现在Eclipse中有名为imsmanagere的项目&#xff0c;将它按以前的方式部署到服务器上&am…