Git学习笔记(2)——版本的回退,和暂存区的理解
2015-05-10 17:26
477 查看
本文主要记录了版本的回退,以及工作区,暂存区概念的理解。
1、查看版本库的信息
git log
git log --pretty=oneline
2、版本的回退
git reset --hard HEAD^
cat readme.txt
git log --pretty=oneline
git reset --hard 71038bf6
git reflog
3、概念理解:
工作区(Working Directory):比如
版本库(Repository):工作区有一个隐藏目录
前面我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用
第二步是用
因为我们创建Git版本库时,Git自动为我们创建了唯一一个
(为了深刻的理解这些感念,建议亲自写些文件测试一下,修改下文件,查看下状态,添加后再查看状态,提交后再次查看下状态。)
4、为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
测试思想:修改内容,添加(不要提交),然后再修改,提交。你会发现第二次的修改没有被提交。
这是因为:Git管理的是修改,当你用
提交后,用
git diff HEAD -- readme.txt
-i am bad!
git status
git add readme.txt
git diff HEAD -- readme.txt
git commit -m "del a line"
git diff HEAD --
git status
//开始之前,先回顾上次的内容,修改文件如下,并提交到版本库。 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@163.com>
Date: Sat May 9 15:06:17 2015 +0800
append GPL
commit 942f575de9e925d256ca4a704e1a37de18697baf
Author: joe <little_star13@163.com>
Date: Sat May 9 14:51:16 2015 +0800
add distributed
commit b401faf255e6a9480b1ed903a2b392ccf4628910
Author: joe <little_star13@163.com>
Date: Sat May 9 11:01:44 2015 +0800
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@{0}: reset: moving to 71038bf6 942f575 HEAD@{1}: reset: moving to HEAD^ 71038bf HEAD@{2}: commit: append GPL 942f575 HEAD@{3}: commit: add distributed b401faf HEAD@{4}: 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 6398377..3f762ee 100644 --- a/readme.txt +++ b/readme.txt @@ -3,4 +3,3 @@ 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 6398377..3f762ee 100644 --- a/readme.txt +++ b/readme.txt @@ -3,4 +3,3 @@ 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
1 file changed, 1 deletion(-)
ubuntu@myubuntu:~/joe/learngit$
git diff HEAD --
readme.txt
ubuntu@myubuntu:~/joe/learngit$
git status
//工作区也干净了 位于分支 master 无文件要提交,干净的工作区 ubuntu@myubuntu:~/joe/learngit$
相关文章推荐
- Git学习笔记二(版本回退、工作区和暂存区、撤销修改、删除文件)
- git学习笔记之版本回退
- 【Git学习笔记】初始化Git仓库和版本回退
- 【Git/Github学习笔记】Git常用命令(版本回退)
- Git学习笔记(几个常用的命令 及 版本回退)
- Git学习笔记(三)---版本回退
- Git学习笔记 chapter02--版本回退
- 《git 版本控制管理》学习笔记
- Git版本控制管理学习笔记4-文件管理和索引
- Git笔记——版本回退(3)
- Git 版本回退/工作区和暂存区
- 【版本控制】git学习笔记(三)
- 《Git 版本控制管理》 学习笔记
- git 版本回退 and git stash 暂存使用
- 分布式版本控制器GIT学习笔记
- 版本控制器git学习笔记(二)Git的使用
- git学习笔记-4 暂存区的概念(1)-提交任务
- 学习Git之笔记一---关于Git版本下载和环境搭建和配置
- [学习笔记]git学习之fork的概念理解
- Git学习-版本回退