删除隐藏版本信息 版本回退_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,一经查实,立即删除!

相关文章

objective-c(初始化)

objective-c(初始化) 创建对象 (编程语言 Objective-C 2.0) 1.类对象与实例化 类的定义完成后,编译器在内存中自动生成唯一的类对象,实例对象都是通过调用类对象的类方法生成的。 类对象是工厂,同时也是蓝图,实例对象是…

使用sphinx快速为你python注释生成API文档

sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发。新版的Python3文档就是由sphinx生成的,并且它已成为Python项目首选的文档工具,同时它对C/C项目也有很好的…

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;     }  …

python临床数据_从临床试验中获取数据

我正在开发一个小Python函数来从clinicalTrials.gov中获取数据。从每个研究记录中,我想从中找出研究的目标条件。例如,对于this研究记录,我需要以下内容:conditions [Rhinoconjunctivitis, Rhinitis, Conjunctivitis. Allergy]然…

Jass 技能模型定义(转)

Jass是什么?先阐释一下什么是jass吧,百度:JASS(正确地说是JASS 2)是魔兽3的程序语言,用于控制游戏和地图的进行,也是魔兽游戏和地图的基础。 地图编辑器中摆放的单位(Unit),区域(Reg…

[原]第一次遭遇Oracle的Bug,纪念一下 |ORA-00600 kmgs_pre_process_request_6|

今天尝试调整一下Oracle的Large Pool Size,希望使rman的速度提升, alter system set large_pool_size80m ; 突然Oracle 实例挂掉了,查看alert file 发现如下 Wed Dec 16 11:14:49 2009 Errors in file /u01/app/admin/mydb/bdump/mydb_mman_…

表格过滤器_不用记账软件也可以记录支出明细,这个在线协同表格很方便

像我们这种中小团队,以前就用 Excel 来记录团队日常的一些支出情况,虽然有很多模板可以套用,但感觉还是有些不便之处,比如在表格里无法记录太多文字;添加发票凭证也不方便;对于不同数据的切换查看也缺乏灵活…

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

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

life list 2010

1. water -1.no water-warm water.less 2. anything - very kindly 3. clean - any room. 4.money is working,no lazy. 转载于:https://www.cnblogs.com/byeday/archive/2009/12/16/1625902.html

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

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

Linux命令 — 设置或查看网络配置命令ifconfig

1. 命令介绍命令格式:ifconfig 【interface】 【options】address主要参数:interface:网络接口名up:打开网络接口down:关闭网络接口broadcast:设置网络接口的广播地址netmask:设置网络接口的子网…

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

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

unity自动生成敌人_unity 2d AI 敌人 自动追踪(1)

今天介绍第一种只靠 c# 代码的 简单 AI 敌人 追踪方法:简单粗暴 ,上代码1,新建对象2,代码如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class AI : MonoBehaviour{publi…

一个简单的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;希望你…

python加密程序_Python加密程序

展开全部alpabcdefghijklmnopqrstuvwxyz0123456789 def num2alp(c):a alp[c]return(a)def alp2num(d):if d ! :return((ord(d)-97)%37)else:return 36def envVigenere(key,plaintext):m len(plaintext)n len(key)etext ""for i in range(m):p plaintext[i]k k…

如何判断网通、电信、铁通IP地址分配段

从http://ftp.apnic.net/apnic/dbase/tools/ 获取地址 shell> wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz shell> tar xzvf ripe-dbase-client-v3.tar.gz shell> cd whois-3.1 shell> ./configure shell> make 完成上述编译安…

​std::multimap

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

python调用msfconsole全自动永恒之蓝攻击_MSF之MS17-010永恒之蓝漏洞利用

Loading...请注意&#xff0c;本文编写于 392 天前&#xff0c;最后修改于 116 天前&#xff0c;其中某些信息可能已经过时。# MSF之MS17-010永恒之蓝漏洞利用1. 准备阶段2. 扫描漏洞3. 漏洞攻击---## 准备阶段**实验准备环境&#xff1a;**攻击机&#xff1a;虚拟机kali系统IP…