第二章 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语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
随机推荐
- 移动端Viewport & 使用rem来开发移动端网站
Viewport大神 无双 的精彩解释 具体参数各型号是否支持参见: http://www.cnblogs.com/2050/p/3877280.html#commentform 摘录: 移动设备上的 ...
- Sublim Text3快捷键大全
Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格 ...
- Ubuntu 12.04搭建l2tp服务器记录。
1. 安装openswan apt-get install openswan 2.打开 /etc/ipsec.conf 文件,做如下配置: 其中,virtual_privat这里包含的网络地址允许配置 ...
- ASP.NET 表单验证实现浅析
首先,自然是配置 Web.config,在 <system.web> 下设定: <authentication mode="Forms"> <form ...
- py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+python2.7环境搭建记录
第一次写博客,以此纪念这几天安装caffe,跑faster-rcnn的血泪史.在此特别感谢网络各路大神,来自全球各地,让我能从中汲取营养,吸取经验,总结规律. faster-rcnn分为matlab版 ...
- Ubuntu 命令大全
一.文件目录类 1.建立目录:mkdir 目录名 2.删除空目录:rmdir 目录名 3.无条件删除子目录: rm -rf 目录名 4.改变当前目录:cd 目录名 (进入用户home目录:cd ~:进 ...
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- select 选中 option的问题
1.[可以实现 不推荐 适合多选] $("#organize_type").find("option:eq("+j+")").attr(& ...
- 将mac上的项目上传到oschina,进行代码托管。
1.首先看一下自己是否有公钥, 在 我的资料-->SSH公钥 查看,如果没有,添加自己的SSH 公钥: SSH key 可以让你在你的电脑和 Git @ OSC 之间建立安全的加密连接. 2. ...
- Struts2------通配符
<struts> <package namespace="/" extends="struts-default" name="tes ...