Git分布式管理-头歌实验日志和版本回退

news2024/12/24 11:33:32

Git使用过程中,一种很常见的情况是:发现某个已经提交到仓库里的代码文件有致命的bug,必须将代码回滚到上一个版本,在这种情况下就显示出了Git的强大。Git为每次提交,都保留了日志,根据提交日志,Git可以方便地进行版本回退。本实训通过介绍Git日志相关知识和操作,使大家掌握Git版本回退相关内容。

一、回到前一次提交  git revert

任务描述

如果提交到本地仓库中的代码发现了bug,就必须将代码回到上一个版本。而在Git中,一次提交就对应着一个版本,因此可以根据日志信息进行版本回退。

本关任务:将本地仓库回退到上一个版本。

相关知识
强大的git log

在之前,我们已经介绍了git log的基本使用方法,这里我们要进一步介绍git log的使用。

  • 查看提交的内容差异 git log提供了-p参数,用于查看每次提交之间的内容差异,如下:   git log -p 即可显示每次提交之间的变化:
  • 而如果想限制显示的范围,则可以再添加参数用于限定:   
    git log -p -2 
    如上,则仅显示最近的两次更新。 如上所示,这一选项附带了每次commit的内容变化,这就为代码审查或者浏览某个搭档的修改内容,提供了很好的参考。
  • 其他git log选项:

    1. 单词层面对比 Git提供了--word-diff选项,可以显示单词层面的差异。当需要在书籍、论文这种很大的文本文件上,进行对比的时候,这个功能就非常有用。

    2. 显示简要的增改行数 Git提供了--stat选项,则可以仅显示增加或者减少了多少行。

    3. pretty选项 使用--pretty 选项选项,可以指定不同的显示属性,如oneline 将每个提交放在一行显示。 shortfullfuller 可以指定展示的信息的多少。

git revert实现版本回退

版本回退可以用git revert命令。git revert撤销提交时,会保留所撤销的提交的记录和历史,并将撤销操作做为一次新的提交。即提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。其具体的使用方法如下:

git reset实现版本回退

git reset也能实现版本回退,但是git revertgit reset也存在一定的区别 :

  • git revert是用一次新的commit来回滚之前的commitgit reset是直接删除指定的commit
  • 在回滚这一操作上看,效果差不多。但是,在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit,“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现。但是git reset是把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入;
  • git reset 是把HEAD向后移动了一下,而git revertHEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

git reset用法如下:

  • git reset HEAD 回到前一次 commit。也可以用于将错误的文件添加进暂存区后,想回退取消,如:   git reset HEAD 文件名
  • git reset HEAD^ 回到前前一次 commit
  • git reset commit 比如:commit = fa042ce57ebbe5b,回到指定的版本,撤销也会作为一次提交进行保存。

另外git reset也可以指定reset的模式:hardsoftmixedmergedkeep。 这几种模式的差别如下:

  • --soft 缓存区和工作目录都不会被改变;
  • --mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响;
  • --hard – 缓存区和工作目录,都同步到你指定的提交。

几种模式的具体使用方法如下:

#直接丢弃工作区和暂存区的修改
git reset --hard HEAD
#暂存区内容保留,工作区修改丢弃
git reset --mixed HEAD
#暂存区和工作区内容都保留
git reset --soft HEAD
编程要求

平台已准备了本地仓库gitTraining,并在master分支进行了三次提交:

  • 第一次提交:添加了helloGit1
  • 第二次提交:添加了helloGit2
  • 第三次提交:添加了helloGit3

现在发现,helloGit3内容有错误,需要撤销第三次提交,即将HEAD指向第二次提交。 本关的编程任务是,补全右侧代码片段中BeginEnd中间的脚本,撤销最近一次提交。

#进入gitTraining
cd gitTraining

#请在下方Begin至End星号线内填写git命令以撤销最近一次提交
#********** Begin **********#

#git reset --hard HEAD~1
git revert HEAD 
#********** End **********#

 

 二、回到指定提交

编程要求

平台已准备了本地仓库gitTraining,并在master分支进行了三次提交:

  • 第一次提交:添加了helloGit1
  • 第二次提交:添加了helloGit2
  • 第三次提交:添加了helloGit3

现在发现,helloGit3helloGit2内容均有错误,需要撤销第三次、第二次提交。即将HEAD指向第一次提交。 本关的编程任务是,补全右侧代码片段中BeginEnd中间的脚本,撤销最近两次提交,以回到第一次提交,即将HEAD指向第一次提交,需要选择--hard模式。

#进入gitTraining
cd gitTraining

#请在下方Begin至End星号线内填写git命令以回到第一次提交的版本
#********** Begin **********#

git reset --hard HEAD~2
#********** End **********#

`git reset --hard HEAD~2` **命令用于将当前分支回退到上一个提交(commit),同时清除工作目录和暂存区的改动**。

该命令由三部分组成:

1. `git reset`: 这是Git的一个基本命令,用来重置当前分支的HEAD指针以及工作目录和暂存区的状态。
2. `--hard`: 这个选项告诉Git不仅要移动HEAD指针,还要清除所有相关的改动,包括工作目录和暂存区的更改。
3. `HEAD~2`: 这里的`HEAD`代表当前分支最新的提交,而`~2`表示要回退到当前提交的前两个版本,即祖父级提交。

使用这个命令时需要非常小心,因为它会丢弃自指定提交之后的所有工作成果,包括未提交的修改和新增的文件。如果确定要执行这样的操作,建议先备份重要的工作内容,以防万一。

#进入gitTraining
cd gitTraining

#请在下方Begin至End星号线内填写git命令以回到第一次提交的版本
#********** Begin **********#
git revert HEAD~2..HEAD
#git reset --hard HEAD~2
#********** End **********#

 `git revert HEAD~2..HEAD` **命令用于撤销当前分支中最近两个提交的更改**。

该命令由两部分组成:

1. `git revert`: 这是Git的一个基本命令,用来创建一个新的提交,该提交会撤销指定范围内的提交的更改。
2. `HEAD~2..HEAD`: 这里的`HEAD`代表当前分支最新的提交,而`~2`表示要回退到当前提交的前两个版本,即祖父级提交。`..`表示范围,所以`HEAD~2..HEAD`表示从祖父级提交到当前提交的范围。

使用这个命令时,Git会自动生成一个新的提交,该提交会撤销指定范围内所有提交的更改。这样做的好处是保留历史记录,并且不会对工作目录和暂存区产生任何影响。但是,如果需要撤销的提交非常多,那么执行这个命令可能会比较耗时。

三、 撤销修改

任务描述

在本地开发中,经常遇到的一个问题是:对一个文件的修改有错误,需要丢弃修改。如何准确地丢弃指定的修改,是一个关键的操作。

本关任务:撤销本地的修改。

相关知识
git reset实现版本回退

当将有错误的文件add进暂存区后,可以使用git reset丢弃修改。即:

git reset HEAD 文件名

但此时修改仍旧保留在工作区。

如果尚未add进暂存区,则可以使用:

 git reset --hard HEAD

这样就能彻底丢弃修改,即将修改从暂存区及工作区彻底删除。 #####git checkout丢弃修改 当将错误的文件add进暂存区后,使用git checkout无法将修改从暂存区中撤销,必须要先使用git reset将修改从暂存区中撤销。

git checkout丢弃修改

当将错误的文件add进暂存区后,使用git checkout无法将修改从暂存区中撤销,必须要先使用git reset将修改从暂存区中撤销。

git chekcout -- hello

通过这种方式,就可将hello文件自上个commit之后,尚未add进暂存区的修改丢弃。

编程要求

平台已为你准备了本地仓库gitTraining,并在master分支进行了一次提交,将文件helloGit提交到了本地仓库。随后,平台又对helloGit进行了修改,但是尚未添加(即add)到暂存区。现在发现此修改有错误需要丢弃。

本关的编程任务是,补全右侧代码片段中BeginEnd中间的脚本,丢弃helloGit中尚未添加到暂存区的修改。

#进入gitTraining
cd gitTraining

#请在下方Begin至End星号线内填写git命令以丢弃helloGit的修改
#********** Begin **********#

#git checkout -- helloGit
git reset --hard HEAD
#********** End **********#

四、删除文件

任务描述

Git使用过程中,涉及到撤回的操作,还有从暂存区或者分支删除文件。比如你错误地将测试过程中产生的日志文件提交到了暂存区或者分支上面去了,那么你可能就需要删除文件。

本关任务:彻底删除本地仓库中某个文件。

相关知识

删除文件需要用到的命令是git rm,且git rm有参数--cached。 当我们需要删除暂存区或分支上的文件,同时工作区也不再需要这个文件了,可以使用:

git rm 文件路径

当我们需要删除暂存区或分支上的文件,但本地又需要使用, 只是不希望这个文件被提交到版本库,可以使用:

git rm --cached 文件路径
文件已添加至暂存区

如果文件被添加到了暂存区,这种情况下直接使用git rm file_path会报错:

$ git rm hello.txt
error: the following file has changes staged in the index:
    hello.txt
(use --cached to keep the file, or -f to force removal)

根据提示我们可以得知,这个时候,如果不想保留hello.txt,则可以使用:

 git rm hello.txt -f

如果想保留hello.txt到工作区则可以使用:

git rm --cached hello.txt
文件已提交至分支

如果文件已经被提交到了某个分支,则可以使用如下命令:

#从当前分支中彻底删除‘文件路径’指定的文件
git rm 文件路径

具体使用方法如:

git rm hello.txt

或者:

#从本地版本库中将‘文件路径’指定的文件删除,并保留到工作区
git rm --cached 文件路径

具体使用方法如下:

git rm --cached hello.txt

但是无论使用哪种方式,都相当于在本地做了修改,在git rm --cached之后,使用git status查看版本库状态,可以得到如下输出:

因此,还需要通过git commit操作将修改提交。

通过以上分析可知,从仓库中删除文件的一般过程为:

git rm <--cached> 文件名
git commit -m "提交信息"
编程要求

平台已为你准备了本地仓库gitTraining,并在master分支进行了一次提交,将文件helloGit提交到了本地仓库。现在需要将helloGit从版本库删除,但还需要将其保留在工作区。 本关的编程任务是,补全右侧代码片段中BeginEnd中间的脚本,将helloGit从本地版本库中删除,但仍保留在工作区。

#进入gitTraining
cd gitTraining

#请在下方Begin至End星号线内填写git命令以丢弃helloGit的修改
#********** Begin **********#


git rm --cached helloGit
#********** End **********#

 

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

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

相关文章

前端开发中,并发请求工具的实现<多文件上传,数据切片>

前端开发中涉及到并发的业务中&#xff0c;如何优雅的实现一个并发工具 1.涉及并发的业务场景 1.> 多文件上传&#xff0c;支持过程中的进度展示&#xff0c;暂停&#xff0c;删除业务 2.> 多数据源的无参静态数据分片获取&#xff0c;如地图业务中海量静态点位的获取分…

centos7升级openssl_3

1、查看当前openssl版本 openssl version #一般都是1.几的版本2、下载openssl_3的包 wget --no-check-certificate https://www.openssl.org/source/old/3.0/openssl-3.0.3.tar.gz#解压 tar zxf openssl-3.0.3.tar.gz#进入指定的目录 cd openssl-3.0.33、编译安装遇到问题缺…

激活函数Swish(ICLR 2018)

paper&#xff1a;Searching for Activation Functions 背景 深度网络中激活函数的选择对训练和任务表现有显著的影响。目前&#xff0c;最成功和最广泛使用的激活函数是校正线性单元&#xff08;ReLU&#xff09;。虽然各种手工设计的ReLU替代方案被提出&#xff0c;但由于在…

机器学习入门-小白必看

机器学习 1. 机器学习的基本概念与背景2. 机器学习的常用方法3.是否需要学习机器学习&#xff0c;机器学习已经过时了&#xff1f;&#xff1f;4. 如何在机器学习上进行创新&#xff1f;5. 我该用哪种机器学习方法&#xff0c;如何定下来呢&#xff1f;总结&#xff08;对小白的…

gazebo平衡车模拟

gazebo和Ros中的平衡车模拟&#xff08;Noetic&#xff09; 控制原理 使用说明 在URDF模型中使用gazebo的 imu 插件获取平衡车姿态从 /joint_state 话题消息获取两轮的速度&#xff0c;相当于电机编码器速度环和直立环使用 串级PID 控制&#xff0c;框图如下&#xff1a;转向环…

02.变量

02.变量 01.变量 变量的概念&#xff1a; 1.变量的作用&#xff1a; 计算机中的存储空间&#xff0c;用于保存数据 2.定义变量的格式 变量名 值 注意&#xff1a; 是赋值运算符&#xff0c;左右两边打上空格是为了代码的规范性&#xff0c;美观性。 num1 3 #num1就是…

零基础学VR全景制作,新手制作流程有哪些?

VR全景技术可以应用于旅游、房地产、教育、娱乐等多个领域&#xff0c;可以为观众提供更加真实、更具沉浸感的体验。可以说&#xff0c;VR全景技术已经逐渐深入到各个领域中&#xff0c;那么对于新手来说&#xff0c;该如何制作VR全景呢&#xff1f; VR全景制作也是需要一定的技…

基于springboot的抗疫物资管理系统论文

目 录 摘 要 1 前 言 2 第1章 概述 2 1.1 研究背景 3 1.2 研究目的 3 1.3 研究内容 4 第二章 开发技术介绍 5 2.1相关技术 5 2.2 Java技术 6 2.3 MySQL数据库 6 2.4 Tomcat介绍 7 2.5 Spring Boot框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行…

金三银四,程序员如何备战面试季

金三银四&#xff0c;程序员如何备战面试季 一个人简介二前言三面试技巧分享3.1 自我介绍 四技术问题回答4.1 团队协作经验展示 五职业规划建议5.1 短期目标5.2 中长期目标 六后记 一个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️…

HarmonyOS—开启AOT编译模式

AOT&#xff08;Ahead Of Time&#xff09;即提前编译&#xff0c;能够在Host端&#xff08;即运行DevEco Studio的电脑&#xff09;将字节码提前编译成Target端&#xff08;即运行应用的设备&#xff09;可运行的机器码&#xff0c;这样字节码可以获得充分编译优化&#xff0c…

【AI视野·今日Sound 声学论文速览 第五十期】Fri, 1 Mar 2024

AI视野今日CS.Sound 声学论文速览 Fri, 1 Mar 2024 Totally 9 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Probing the Information Encoded in Neural-based Acoustic Models of Automatic Speech Recognition Systems Authors Quentin Raymondau…

SpringCloud--Sentinel使用

一、快速开始 Sentinel 的使用可以分为两个部分&#xff1a; 核心库&#xff08;Java 客户端&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行于 Java 8 及以上的版本的运行时环境&#xff0c;同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台&…

【Spring高级】第1讲:BeanFactory 与 ApplicationContext

目录 两者关系BeanFactory功能ApplicationContext功能 两者关系 BeanFactory和ApplicationContext都是Spring框架中非常重要的接口&#xff0c;它们都与Spring的IoC容器有关。 下面通过SpringApplication的引导类来说明上面两个接口。 看下面代码&#xff1a; SpringBootAp…

【场景题】如何设计一个购物车功能?

本文参考文章&#xff1a;https://www.hollischuang.com/archives/6998 https://www.woshipm.com/pd/4115447.html https://zq99299.github.io/note-book/back-end-storage/01/03.html 首先我们要明白&#xff1a;购物车系统在电商系统中的角色是作为用户选购商品和最终下单的桥…

Flutter中的三棵树

Widget Tree&#xff1a; 页面配置信息。 Element Tree&#xff1a; Widget tree的实例化对象&#xff0c;创建出renderObject&#xff0c;并关联到element.renderobject属性上&#xff0c;最后完成RenderObject Tree的创建。 RenderObject Tree&#xff1a;完成布局和图层绘制…

Unity2013.1.19_DOTS_Burst compiler

Unity2013.1.19_DOTS_Burst compiler DOTS是一种新产品&#xff0c;现在尚在起步阶段。由于它处于持续发展中&#xff0c;随着我们努力使其达到最佳状态&#xff0c;您将看到API会不断演变和日趋成熟。 DOTS包含以下元素&#xff1a; 实体组件系统(ECS) - 提供使用面向数据的…

有个朋友被骗了,大家要擦亮眼睛

1.引言 大家好&#xff0c;我是Leo哥&#x1fae3;&#x1fae3;&#x1fae3;&#xff0c;昨天凌晨有个粉丝朋友找到Leo哥&#xff0c;咨询一些问题&#xff0c;现在的朋友们真卷呐&#xff0c;大半夜还在挑灯夜战。可无奈Leo哥12点之前已经睡了&#xff0c;身体为重&#xf…

云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测

腾讯云轻量应用服务器2核4G5M配置一年优惠价165元、252元15个月、三年756元&#xff0c;100%CPU性能&#xff0c;5M带宽下载速度640KB/秒&#xff0c;60GB SSD系统盘&#xff0c;月流量500GB&#xff0c;折合每天16.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支…

安装ProxySQL,教程及安装链接(网盘自提)

一、网盘下载&#xff0c;本地直传 我网盘分享的是proxysql-2.5.5-1-centos8.x86_64.rpm&#xff0c;yum或者dnf直接安装就行 提取码&#xff1a;rhelhttps://pan.baidu.com/s/1nmx8-h8JEhrxQE3jsB7YQw 官方安装地址 官网下载地址https://repo.proxysql.com/ProxySQL/ 二、…

[项目设计] 从零实现的高并发内存池(三)

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[高并发内存池] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 ​ 目录 4.CentralCache实现 4.1 CentralCache整体架构 4.2 围绕Span的相关设计…