本文主要记录了版本的回退,以及工作区,暂存区概念的理解。


//开始之前,先回顾上次的内容,修改文件如下,并提交到版本库。
Git is a distributed version control system.
Git is free software distributed under the GPL.

1、查看版本库的信息

ubuntu@myubuntu:~/joe/learngit$ 

git log

    //可以看到,下面有3个版本
commit 71038bf6cbd05ef559549a13a351aa8465be6c4d //这一行是每个版本的ID
Author: joe <little_star13@.com>
Date: Sat May :: + append GPL commit 942f575de9e925d256ca4a704e1a37de18697baf
Author: joe <little_star13@.com>
Date: Sat May :: + add distributed commit b401faf255e6a9480b1ed903a2b392ccf4628910
Author: joe <little_star13@.com>
Date: Sat May :: + joe's first txt
ubuntu@myubuntu:~/joe/learngit$

git log --pretty=oneline

    //我们还可以简单的显示信息
71038bf6cbd05ef559549a13a351aa8465be6c4d append GPL
942f575de9e925d256ca4a704e1a37de18697baf add distributed
b401faf255e6a9480b1ed903a2b392ccf4628910 joe's first txt

2、版本的回退

//在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
ubuntu@myubuntu:~/joe/learngit$

git reset --hard HEAD^

HEAD 现在位于 942f575 add distributed
ubuntu@myubuntu:~/joe/learngit$

cat readme.txt

     //查看一下文件内容,发现已经回退了。
Git is a distributed version control system
Git is free software
ubuntu@myubuntu:~/joe/learngit$

git log --pretty=oneline

    //重新查看一下版本信息,发现剩下了2个
942f575de9e925d256ca4a704e1a37de18697baf add distributed //也就是退回去以后,就不能回来了。其实是可以的。
b401faf255e6a9480b1ed903a2b392ccf4628910 joe's first txt
ubuntu@myubuntu:~/joe/learngit$

git reset --hard 71038bf6

        //只要知道某个版本的ID,我们就可以前去。(ID就是版本信息前面的一串字符串,我们只要记住前几位就可以,git会自动分配检测的。)
HEAD 现在位于 71038bf append GPL
ubuntu@myubuntu:~/joe/learngit$ cat readme.txt
Git is a distributed version control system
Git is free software distributed under the GP
ubuntu@myubuntu:~/joe/learngit$

git reflog

    //如果不知道ID,也没有版本信息,我们可以查看命令日志记录。
71038bf HEAD@{}: reset: moving to 71038bf6
942f575 HEAD@{}: reset: moving to HEAD^
71038bf HEAD@{}: commit: append GPL
942f575 HEAD@{}: commit: add distributed
b401faf HEAD@{}: commit (initial): joe's first txt

3、概念理解:

工作区(Working Directory):比如learngit文件夹就是一个工作区。

版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

前面我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

(为了深刻的理解这些感念,建议亲自写些文件测试一下,修改下文件,查看下状态,添加后再查看状态,提交后再次查看下状态。)


4、为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。

测试思想:修改内容,添加(不要提交),然后再修改,提交。你会发现第二次的修改没有被提交。

这是因为:Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:

//首先查看工作区是干净的
ubuntu@myubuntu:~/joe/learngit$ git status
位于分支 master
无文件要提交,干净的工作区
ubuntu@myubuntu:~/joe/learngit$ ls
abc.c readme.txt
//修改了文件
ubuntu@myubuntu:~/joe/learngit$ vi readme.txt
ubuntu@myubuntu:~/joe/learngit$

git diff HEAD -- readme.txt

    //查看一些区别
diff --git a/readme.txt b/readme.txt
index ..3f762ee
--- a/readme.txt
+++ b/readme.txt
@@ -, +, @@ Git is free software distributed under the
Are you ok?
Yes,i am fine.
What about you?

-i am bad!

     //区别以红色标记,很明显
ubuntu@myubuntu:~/joe/learngit$

git status

    //查看状态,发现没有暂存add
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <file>..." 更新要提交的内容)
(使用 "git checkout -- <file>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
ubuntu@myubuntu:~/joe/learngit$

git add readme.txt

     //add以后,查看状态,是没有提交
ubuntu@myubuntu:~/joe/learngit$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <file>..." 撤出暂存区) 修改: readme.txt ubuntu@myubuntu:~/joe/learngit$

git diff HEAD -- readme.txt

    //查看对比,依然是有差异,虽然add了,但是还是和版本库是有差异的。
diff --git a/readme.txt b/readme.txt
index ..3f762ee
--- a/readme.txt
+++ b/readme.txt
@@ -, +, @@ Git is free software distributed under the
Are you ok?
Yes,i am fine.
What about you?
-i am bad!
ubuntu@myubuntu:~/joe/learngit$

git commit -m "del a line"

        //只有正真提交以后,才没有差异
[master 010726f] del a line
file changed, deletion(-)
ubuntu@myubuntu:~/joe/learngit$

git diff HEAD --

 readme.txt
ubuntu@myubuntu:~/joe/learngit$

git status

    //工作区也干净了
位于分支 master
无文件要提交,干净的工作区
ubuntu@myubuntu:~/joe/learngit$

Git学习笔记(2)——版本的回退,和暂存区的理解的更多相关文章

  1. Git使用指南(2)——工作区,暂存区,版本库

    1 工作区修改添加到暂存区 git add 2 暂存区提交到版本库 git commit 3 版本库更新到暂存区 git reset HEAD 4 删除暂存区文件 git rm --cached< ...

  2. Git入门 时光穿梭鸡 版本回退 工作区 暂存区

    分布式集中式 CVS及SVN都是集中式的版本控制系统 , 而Git是分布式版本控制系统 集中式版本控制系统,版本库是集中存放在中央服务器的, 而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得 ...

  3. 【原创】关于Git暂存区的理解

    关于Git暂存区的理解      暂存区可以说是Git的三大重要的区域之一,另外两个分别是工作目录和Git仓库,所以说对暂存区的深入理解可以帮助我们理解很多Git命令背后隐藏的工作原理.今天,本文将以 ...

  4. git使用记录七:对工作区和暂存区的一些操作场景

    比较暂存区和HEAD所含文件的差异? 操作场景如下: 修改readme.md 文档 vi readme.md 加入到暂存区域 git add readme.md 使用git diff -cached ...

  5. git分布式版本控制系统权威指南学习笔记(二):git add暂存区的三个状态以及暂存区的理解

    文章目录 不经过git add(到暂存区),能直接进行commit吗? 举个

  6. Git使用详细教程(1):工作区、暂存区、本地仓库、远程仓库

    之前的写过一篇如何在服务器上搭建Git服务Git服务器搭建,接下来的一段时间,我将详细的讲解Git的使用.看如下一张图片,本篇主要理解一些基本概念. 图中几个名词的意思如下: workspace: 工 ...

  7. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

  8. GIt学习第二天之版本回退、工作区和暂存区

    搬运自 ‘廖雪峰的官方网站’ 地址:https://www.liaoxuefeng.com/ 1.版本回退 在Git中,我们用git log命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花 ...

  9. Git学习笔记(3)——撤销修改和文件的删除

    本文主要记录了git中,错误的撤销和文件的删除. 撤销修改 这里有3中情况 改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 不但改乱了工作区某个 ...

随机推荐

  1. Oracle表空间数据文件移动的方法

    最近遇到这样的一个问题,Oracle存放表空间文件的盘符 空间不够了,必须把部分表空间迁移出去, [转]http://www.jb51.net/article/77026.htm 实现把用户表空间中的 ...

  2. RestController 和Controller的区别

    restful风格,restcontroller与controller 初步接触springmvc的时候,被要求使用restful风格,彼时一头雾水,不懂何谓restful,参阅了很多资料,慢慢的接触 ...

  3. Qt MVC(模型-视图-代理)

    实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...

  4. PWM波控制舵机总结

    文章转自:http://www.geek-workshop.com/thread-70-1-1.html 一.关于舵机: 舵机(英文叫Servo):它由直流电机.减速齿轮组.传感器和控制电路组成的一套 ...

  5. IT小喇叭-企业品牌宣传、产品营销推广的首选

    IT小喇叭-企业品牌宣传.产品营销推广的首选 IT小喇叭,成立于2015年6月初,成都芮嘉科技有限公司旗下产品,主要进行媒体资源整合.宣传报道:使移动互联网等相关企业的产品宣传.品牌营销变得更加方便. ...

  6. PPT开发 * .pps 文件类型

    PPT开发, * .pps ,文件类型 PPS 这个格式也是PowerPoint文件格式的一种. pps的意思是说PowerPoint Show,POWER POINT会直接生成预览形式为你放映幻灯片 ...

  7. 原生JavaScript实现滚动条

    没事找事,明明overflow:scroll|auto就可以,只是难看点(实际上css也能设置).只当练习写拖拽.监听事件.位置检测了. 原理是对滑动条块进行监听,按下鼠标按键后,监听鼠标移动,然后根 ...

  8. 重编译Linux命令源代码

    转: http://blog.csdn.net/endoresu/article/details/6967435 以su命令为例. 查看su命令的路径: # which su /bin/su 查看su ...

  9. MATLAB不运行也不报错

    今天本来挺激动找到能运行的好几个程序 MATLAB忙到busy也是停不下来 本来不以为然 结果呢 吃了个水果 一杯水都喝下去了 还没结果(⊙o⊙) 这时候解决办法只有一个 Ctrl+c

  10. 我的Sharepoint母版页的使用

    在Sharepoint 2010母版页文件夹里面,有一个叫v4.master的母版页文件. 在它的基础上修改成想要的母版页.我们用最少的修改完成我们想要的效果. 我们有时是要这样的一个母版页,顶部Ri ...