第二章 git 工作区与reset,revert
1.Git工作区原理图
要清楚理解git reset的三个模式的区别,首先应该搞明白Git的各个工作区的划分。
工作区(working directory):在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。可简单理解为正在编辑的本地工程。
暂存区(英文叫stage或index):它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。如果当前仓库,有文件更新,并且使用git add 命令,那么这些更新就会出现在暂存区中。
版本库:当前仓库下,如果没有任何的提交,那么版本库就是对应上次提交后的内容。
下图可以清晰解释三者的关系:
从上图可以看出各个git指令与各工作区的关系。
2.Git撤销指令与工作区关系实践
2.1 git rm --cached:将文件从Index中移除
首先在项目中创建一个aaa.txt文件。此时aaa.txt只存在于工作区(working directory)。使用git status查看文件状态:
使用 git add指令将aaa,txt提交到暂存区Index,此时工作区与暂存区已同步。使用git status查看文件状态:
此时如果想要将aaa.txt文件从Index中移除,只保留在工作区中,可以使用git rm --cached指令。
git add的作用是将工作区新增的文件添加到暂存区中,也可以将工作区已经被Trace文件的改动同步到暂存区中
可以发现执行git rm --cached指令后,aaa.txt从Index中移除,只保存在工作区。
2.2 git reset
将aaa.txt文件重新add到Index暂存区,然后执行commit操作将aaa.txt提交到版本库。如果此时想要撤销commit,可以进行如下操作:
git reset --soft HEAD~1, 执行后再查看status如下:
可以看出,执行完git reset --soft HEAD~1后aaa.txt变成待commit状态,即aaa.txt在工作区与暂存区中保留,版本库已回滚。
重新执行commit后,执行git reset --mixed HEAD~1操作:
执行git reset --mixed HEAD~1操作后,此时aaa.txt处于待add状态,即aaa.txt保留在了工作区,暂存区与版本库中已回滚。
重新执行commit -add后,执行git reset --hard HEAD~1操作:
此时aaa.txt在工作区,暂存区,版本库中均已回滚。
注意:使用reset操作后,在git log中的commit记录也会被删除。
2.3 git revert
相比于reset操作会修改commit history,git revert
命令通过创建一次新的 commit
来撤销一次 commit
所做出的修改。这种撤销的方式是安全的,因为它并不修改commitm history。
第二章 git 工作区与reset,revert的更多相关文章
- Git的checkout, reset, revert
不管是修改还是新建文件,都必须通过git add把这次修改从工作区加到暂存区: commit只是提交暂存区的修改,还没add到暂存区处于工作区的修改是不会commit的: git checkout ...
- 第二章 Git
1.安装 这个就不必细说了 2.安装完后还要进行一步设置. 在命令行输入: git config --global user.name "Your Name" git config ...
- 第一章 git指令与设置
相关指令: 1.从远程的master分支上创建新的分支,此时新分支内容与master分支内容相同: git checkout master; git branch newbranch; git che ...
- git reset revert 回退回滚取消提交返回上一版本
git reset revert 回退回滚取消提交返回上一版本 总有一天你会遇到下面的问题. (1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚. (2)改完代码测试也没有问题,但是上线发现你 ...
- Android群英传神兵利器读书笔记——第二章:版本控制神器——Git
本人一直是徐医生的真爱粉,由于参加比赛耽误了8天,导致更新得有点慢,大家见谅 2.1 Git的前世今生 Git是什么 Git安装与配置 2.2 创建Git仓库 Git init Git clone 2 ...
- 第七章 : Git 介绍 (下)[Learn Android Studio 汉化教程]
Learn Android Studio 汉化教程 Let’s reset even further to remove all traces of your work on the deprecat ...
- git 工作区管理
git工作区 git的工作区就是电脑中能看到的目录,比如我的learning文件夹就是一个工作区 版本库暂存区 工作去有一个隐藏的目录.git,这个不算工作区,而是git的版本库 git的版本库中存了 ...
- 《LINUX内核设计与实现》读书笔记之第一章和第二章
一.第一章 1. Unix内核的特点简洁:仅提供系统调用并有一个非常明确的设计目的抽象:几乎所有东西都被当做文件可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力进程:创建 ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
随机推荐
- maven基本用法
一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录(本 ...
- cs11_c++_lab3
Matrix.hh class Matrix { int row; int col; int *p; void copy(const Matrix &m); void clearup(); p ...
- 这是个简单的UTF8转码的小Demo
NSString *name = @"你好啊"; NSString *string = [NSString stringWithFormat:@"%@",nam ...
- SQL日期格式化应用大全
Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVE ...
- JVM GC原理
JVM原理 1.分代回收(目前JDK都采用此方式) 采用分治的思想,进行代的划分,把不同生命周期的对象放在不同代上,不同代上采用最适合它的垃圾回收方式进行回收.非堆区有CMS Perm Gen(持久化 ...
- Win8.1无法安装.NET Framework 3.5的解决办法
这个问题纠结了我很多天,恢复系统也没用,差点儿就重装Win8,现在终于解决了,你也来试试吧! 机型:台电X89 系统:Win8.1 with bing 故障:在未安装.NET Framework 3. ...
- HTTP权威指南笔记-1.概述
1.1 通讯 Web内容是存储在服务器上的,Web服务所使用的是HTTP协议,所以经常称为HTTP服务器.通讯过程为客户端(正常我们所使用的)发出请求,服务端根据客户端的HTTP请求响应相应数据,这就 ...
- python3.5------三级菜单
笔者QQ :360212316 逻辑图 代码 city = { "华南": { "广东": ["广州市", "佛山市", ...
- Google V8编程详解(一)V8的编译安装(Ubuntu)
V8的编译比较简单,需要同时安装git和svn. 下载V8源码: git clone git://github.com/v8/v8.git v8 && cd v8 切换到最新版本: g ...
- js判断input输入框长度(支持中英文输入)
function CheckTxtLength(txt) { var num = txt.replace(/[^\x00-\xff]/g, 'xx').length; if (num <=11) ...