删除隐藏版本信息 版本回退_git之版本穿梭术

上一篇主要针对使用git add和git commit两个指令提交文件到本地版本库做了详细的介绍,其实提交文件到版本库无非就是两个步骤,先将文件添加到暂存区,所有要提交的文件全部添加完毕,统一提交到版本库。那我们每一次提交都会生成一个不同的版本,我们如何对这些不同的版本进行管理呢?本篇文章主要谈谈版本的管理,比如版本回滚,修改的管理删除等。

暂存区文件删除

我们都清楚,我们要更新版本库首先git add一个文件,这时候这个文件所做的修改就会添加到暂存区,但是这时候如果我们发现添加错文件了,我们如何删除暂存区的文件呢?这里一般来说有三种情况存在:
  • 暂存区存在一个文件hello.txt,我们需要从暂存区删除这个文件,但是工作区文件不能删除。

  • 暂存区存在一个文件hello.txt,我们需要从暂存区删除这个文件,并且同时删除工作区文件。

  • 我们暂存区有多个文件,需要同时清空整个暂存区。

只清除暂存区的某个文件

在git暂存区有多个文件,如果我们只想要从暂存区删除其中一个文件,那我们可以使用命令:

git rm --cached hello.txt
清空暂存区文件并且删除工作目录对应文件

在git暂存区有多个文件,如果我们只想要从暂存区删除其中一个文件,并且将这个文件同时从工作目录删除,那我们可以使用命令:

git rm -f hello.txt

清空暂存区

清空暂存区所有缓存文件,可以删除版本库的index文件,就可以达到清空暂存区的目的,可以使用命令

rm .git/index
我简单的录制了一个gif图演示清除缓存区的操作:

c9ef73e4ac6a63b909c0c91a78daaedc.gif

暂存区文件修改比如我们有一个hello.txt文件,第一次插入了一句话,git add添加到暂存区,然后我们不使用git commit提交,而是选择继续更改工作区的hello.txt,这时候就导致暂存区的hello.txt文件和工作区的hello.txt不一致,那这时候选择git commit提交究竟提交的是暂存区的旧版本还是工作区的新版本呢?我们上一篇其实讲过一般情况下使用git commit -m只会提交暂存区的文件,所以说一般情况下就算工作区文件修改了也一样只会提交暂存区的旧版本,但是为何说一般情况呢?因为我们上篇也提到了git commit -a -m命令,使用这个命令如果之前我们已经将hello.txt文件提交到版本库,代表这个文件已经被Git进行版本管理,这时候使用git commit -a -m命令则会将工作区做了修改但是没有添加到暂存区的文件先添加到暂存区再提交,两步操作合二为一,但是我们一般情况不建议使用这个命令,特别新手更是应该分成两步操作确保不会出现问题。我也简单的录制了一个gif简单解析下这个过程:

5e5322cd0cf3155448d0e11af99403b5.gif

可以看到,我先将文件添加到暂存区,然后修改文件新增一句话,再次使用git status命令查看暂存区状态提示hello.txt文件被修改,这时候我选择git commit提交,再次查看状态一样提示hello.txt文件被修改,所以证明我们工作区所做的修改并没有被真正提交,提交的一样是暂存区的旧版本。

撤销修改

有朋友看到这个标题撤销修改,会纳闷撤销修改不就是将文件从暂存区删除,刚才已经提到过了,但是如果我们需要撤销工作区的修改呢,也就是将hello.txt撤销修改回退到上一次提交的版本如何做呢?实际上我们git add后使用git status命令

$ git statusOn branch masterChanges to be committed:  (use "git restore --staged ..." to unstage)        modified:   hello.txtUntracked files:  (use "git add ..." to include in what will be committed)        project/        scoreInfo.txt
可以看到提示我们使用git restore --satged hello.txt可以从暂存区撤销这个文件,我们执行完这个命令再次执行git status
$ git statusOn branch masterChanges not staged for commit:  (use "git add ..." to update what will be committed)  (use "git restore ..." to discard changes in working directory)        modified:   hello.txtUntracked files:  (use "git add ..." to include in what will be committed)        project/        scoreInfo.txt

可以看到再次提示可以使用git restore hello.txt撤销工作区的修改回退到上一次提交的版本,再次使用这个命令你个发现我们刚才工作区所做的修改果然全部丢失了。那如果我们想要放弃暂存区的修改并且同时回退工作区文件的修改,执行两次命令固然没问题,但是这时候我们可以使用一个命令直接实现:

git checkout -- hello.txt
使用这个命令一般有两种可能,hello.txt文件修改已经添加到暂存区,使用这个命令则会从暂存区删除hello.txt并且工作区文件版本同时回退。第二种可能文件工作区做了下盖,还未添加到暂存区,则直接回退工作区版本,所以使用这个命令可以直接将刚才的两个命令合二为一。版本回退刚才对版本做修改一直都是针对工作区和暂存区,那如果我们工作区版本修改出问题了废掉了,我们想要将版本回退到版本库某一个版本如何实现呢?首先我们需要先查看目前提交了几个版本,这时候可以使用git log查看不同版本的摘要信息:

10fd6a1fbba2a222cf56e14ad2a0aea4.png

可以看到我们一共提交了三次修改,生成了3个commit_id,我们可以看到每一次提交的备注,然后找到我们需要回退版本的commit_id,取到了commit_id之后我们就可以实现版本回退,使用命令:

git reset --hard HEAD^
使用这条命令可以成功将版本回退到上一个版本,比如我们要回退三个版本之前,我们可以使用这个命令你个连续执行三次,但是如果十个百个版本呢?实际上上面的命令完整是:
git reset --hard commit_id

也就是我们只需要传对应版本的commit_id就可以实现版本回退到对应的版本,而要查询旧版本的commit_id刚才说过了使用git log就可以实现。

2afcf68d7dcd8f4d6a0b381afb5450c1.png

我们可以看到我是用命令回退到上一个版本,再次git log查看版本log,发现我刚才的版本由于回退丢失了,如果我版本回退后悔了,要如何恢复到刚才的新版本呢?Git还提供了一个记录所有历史的命令:git reflog,我们可以使用git reflog查看所有版本历史,最后使用git reset指定刚才的commit_id进行恢复。

e06fa1a9b179acef6f6cc8ae411873c5.png

可以看到版本成功恢复到刚才的新版本了,所以使用git log,git reflog,git reset我们就可以在所有版本来回穿梭,不用担心回退导致版本丢失的问题。通过本篇文章讲到的命令,基本可以满足工作中对于版本库管理的一般要求了。下一篇开始将本地仓库接入远程仓库,实现将项目推送到第三方远程仓库存储,比如codding,码云,GitHub等。欢迎关注公众号:程序猿周先森。查看更多精彩文章。d5c6f3c43d695cbf645369f3ed53c3e1.png推荐阅读git入门篇(1)--初识Gitgit入门篇(2)--Git的安装

git入门篇(3)--更新文件到版本库

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

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

相关文章

c#中使用ref和out传值

c#中使用ref和out传值 首先,如果不使用这两个关键字,那是什么样 呢?看下面的例子:使用ref:using System; class Test {     static void Swap(ref int x, ref int y)     {         int temp x;         x y;         y temp;     }  …

喜马拉雅第三方客户端开发(接口和接口数据解析)。

前言:最近闲来无事,看了网上豆瓣的第三方客户端,手有点痒,决定自己动手开发一个客户端,比较了荔枝和喜马拉雅,决定开发喜马拉雅的第三方客户端。 客户端使用了WPF开发。 1.抓取接口; 首先得解决…

聚合复合_聚合复合微生物菌剂的功能

不点蓝字关注我飞走啦!在经营肥料上来讲,大家都知道做复合微生物菌剂,不仅可以活化疏松土壤,而且在各种作物上抗逆、防病、增产的效果都非常的好。问为什么说大家都要重点使用聚合微生物菌剂呢?答因为聚合微生物菌剂和…

代理模式详解(静态代理和动态代理的区别以及联系)

原文链接:https://www.cnblogs.com/takumicx/p/9285230.html 1. 前言 代理模式可以说是生活中处处可见。比如说在携程上定火车票,携程在这里就起到了一个代理的作用,比起我们在官网上或者直接去柜台订票,携程可以为用户提供更多人性化的选择。再比如代购,我自己的mb…

一个简单的HelloWorld程序

/* * 编译器:  VC6.0 * 类 型:  C语言 */ 1 #include <stdio.h>//#includes代表是C预处理指令,stdio.h代表是在此行位置键入了库文件stdio.h的完整内容,是标准输入输出头文件,< and >代表是直接从库文件加载stdio.h文件。2 3 intmain(void)//int代表此main…

sass 安装配置和使用

一、什么是SASSSASS在CSS的基础上做了一些扩展&#xff0c;使用SASS你可以使用一些简单的编程思想进来编写CSS。比如&#xff0c;SASS中可以定义变量、混合、嵌套以及 函数等功能。只不过SASS不像CSS&#xff0c;可以直接运用到项目中&#xff0c;如果你需要将样式运用到项目中…

为什么我的对象被 IntelliJ IDEA 悄悄修改了?

背景 最近&#xff0c;在复习JUC的时候调试了一把ConcurrentLinkedQueue的offer方法&#xff0c;意外的发现Idea在debug模式下竟然会 “自动修改” 已经创建的Java对象&#xff0c;当时觉得这个现象很是奇怪&#xff0c;现在把问题的原因以及解决过程记录下来&#xff0c;希望你…

​std::multimap

2019独角兽企业重金招聘Python工程师标准>>> std::multimap multimap,是一个关联性容器,用于存放这样的元素,这些元素是由键以及关联的值组成.容器内容将根据元素的键进行排序.并且容器可以插入多个具有相同键的元素.接口 pair<const_iterator,const_iterator>…

容器部署解决方案Docker

一、Docker简介 1.1 虚拟化 【什么是虚拟化】 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&…

BREW做的第一个程序--Hello world!

这几天开始做BREW开发了&#xff0c;刚开始挺晕的。又是C指针&#xff0c;又是BREW的SDK文档&#xff0c;还有环境配置&#xff0c;一大堆东东&#xff0c;真是让人手忙脚乱。好不容易配好了环境&#xff0c;写出了第一个Hello world!程序。感觉还不错&#xff0c;就把代码和想…

careercup-链表 2.1

2.1 编写代码&#xff0c;移除未排序链表中的重复节点。 不使用临时缓存&#xff1a; 如果不允许使用临时的缓存(即不能使用额外的存储空间)&#xff0c;那需要两个指针&#xff0c; 当第一个指针指向某个元素时&#xff0c;第二个指针把该元素后面与它相同的元素删除&#xff…

随机排列_“按字母顺序排列”其实是种随机顺序

闲话之前有聊过&#xff0c;微信公众号这边接的广告不多&#xff0c;主要收益来自于微信自带的中插广告。后来同学们还开玩笑说“研究半天没发现这个图片哪里没品了&#xff0c;才发现是广告。”另外还有一部分收益&#xff0c;来自于各位的打赏。鉴于大部分人都是打赏一两块钱…

android 获取应用的资源id和uri

2019独角兽企业重金招聘Python工程师标准>>> 在某些应用中&#xff0c;为了实现应用apk资源放入重复利用&#xff0c;或者使用反射得到本应用的资源&#xff0c;需要使用反射反射方式获得&#xff0c;但Resources类中也自带了这种获取方式&#xff0c;并且功能更加强…

(SQL语句)按指定时间段分组统计

我现在有一张表&#xff1a; 列名1 时间 03174190188 2009-11-01 07:17:39.217 015224486575 2009-11-01 08:01:17.153 013593006926 2009-11-12 08:04:46.560 013599584239 2009-11-22 08:53:27.763 013911693526 2009-11-23 08:53:51.683 013846472440 2009…

数据库迁移_数据库迁移了解一下

mongodb数据迁移因服务器到期&#xff0c;需要将之前机器上面的数据进行数据迁移&#xff0c;并将服务全部docker化备份首先需要将现有即将到期的服务器上面的mongo数据进行备份mongodump -h dbhost -d dbname -o dbdirectory-h&#xff1a;mongodb所在服务器地址&#xff0c;可…

人脸颜值评分软件_在线算个颜值,特科学的那种 | 知多少

用 AI&#xff0c;科学的为颜值打个分。用 AI&#xff0c;打造科学颜值打分器https://www.zhihu.com/video/1185672892095848448图文版本送给不方便打开的朋友 (●u●)」如何科学的为颜值打个分&#xff1f;三庭五眼、四高三低&#xff1f;脸部是否对称&#xff1f;是否与本民族…

图片翻转

图片翻转 原文:图片翻转本人录制技术视频地址&#xff1a;https://edu.csdn.net/lecturer/1899 欢迎观看。这一节继续为大家介绍CSS3的动画效果: 图片翻转。 在iOS中的章节中&#xff0c;我也介绍过类似的效果&#xff0c;如果感兴趣的话&#xff0c;请点击这里查看&#xff1a…

【原】页面跳转以及表单提交中有中文的解决办法

这两天一直碰到一个郁闷的问题&#xff0c;在对表单进行提交的时候&#xff0c;用户名是中文的&#xff0c;怎么测试都不通过, 今天上午突然想起来是不是因为中文字符编码的问题!经过测试&#xff0c;果然是因为这个问题&#xff01; 现在把解决方法贴出来&#xff01;呵呵&…

实验吧之NSCTF misc250

下载的是一个流&#xff0c;用wireshark打开&#xff0c;由于原题是这样的&#xff1a;小绿在学习了wireshark后&#xff0c;在局域网内抓到了室友下载的小东东0.0 你能帮他找到吗&#xff1f;说明我们应该重点关注http传送的东西&#xff1a; 这里面一共有四个http文件&#x…

西澳大学商科专业排名_澳洲西澳大学优势专业排名多少

澳洲西澳大学优势专业排名多少西澳大学农业和林业专业在2018年QS世界排名中排名第32西澳大学解剖学和生理学专业在2018年QS世界排名中排名第13西澳大学地球与海洋科学专业在2018年QS世界排名中排名第32西澳大学土木结构工程专业在2018年QS世界排名中排名第37西澳大学矿产和采矿…