git学习(廖雪峰git教程)笔记 二

  • 查看历史版本

现在,我们的Readme.txt已经有好几个版本了,这时可以用git log查看详细历史信息,或者用$ git log --pretty=oneline显示缩略信息:

[zhangxiyu@localhost learngit]$ git log –pretty=oneline
fe3b707ad53aa12408943bbc2b133a47972c5f6c CHG_5_Secreat
5130706cd2266c641ae71125e2dfdaadd4136e63 change_4_Hero
5bc3b1506a1dd66fc3fa542c331c76c0c91ba6d5 Third change
2e7f6aa2b2532f07c75ef971fed7d3ca3dfb7a52 Second change
8815e57046754b4c2799a8b3f5eba000c986e3b0 first add

前面的一大串类似fe3b……726c的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。

  • 版本回退

现在版本信息已经都有了,如果想回到之前的一个版本的状态的话就可以利用git reset命令回退了。在git中,当前版本的表示方法是HEAD(注意是大写),也就是最新的提交,上一个版本的表示方法就是HEAD^,上上一个就是HEAD^^,以此类推。但如果上一百个版本的话这样的写法就太麻烦了,所以也可以用HEAD~100来表示,很方便:

$ git reset –hard HEAD^

这里有个--hard参数,这里先不管,以后会提到,不知道的可以先百度。

此时,我们已经回到原来的版本了,用git log查看版本信息发现原来最后一次修改的版本信息已经不见了,但这时我们后悔了又想回去该怎么办?同样的利用git reset命令,不过后面的参数不能是HEAD^了,应该换成你要回去的版本号,比如我们要回到Third change这个版本就可以这样写:

$ git reset –hard 5bc3b15
HEAD is now at 5bc3b15 Third change

如果找不到版本号可以用git reflog命令查看历史操作记录,这个命令可以记录每一次对git的操作:

[zhangxiyu@localhost learngit]$ git reflog
fe3b707 HEAD@{0}:fe3b707ad: updating HEAD
5130706 HEAD@{1}: HEAD^: updating HEAD
fe3b707 HEAD@{2}: fe3b707ad: updating HEAD
5130706 HEAD@{3}: HEAD^:updating HEAD
fe3b707 HEAD@{4}: commit: CHG_5_Secreat
5130706 HEAD@{5}: 5130706: updating HEAD
5bc3b15 HEAD@{6}: 5bc3b15: updating HEAD
5130706 HEAD@{8}: HEAD~2: updating HEAD
5130706 HEAD@{9}: commit: change_4_Hero
5bc3b15 HEAD@{11}: commit: Secondchange
8815e57 HEAD@{12}: commit (initial): first add

这样就可以回到任意修改过的版本了。

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向HEAD^,然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。(这里就不放图了,廖雪峰教程里讲的很详细)。

  • 工作区
  • 版本库

工作区和版本库是Git里很重要的概念,工作区就是在电脑里能看到的那个目录,比如我们最开始创建的learngit这个目录就是个工作区,而里面的.git 隐藏文件它就是版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。这张图解释的很清楚!
这里引用原教程里的图片

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

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

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

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

现在,我们再次对Readme.txt做一次修改,再创建一个LIENCES文件,此时我们用git status查看工作区状态:

[zhangxiyu@localhost learngit]$ git status
# On branch master
# Changed but not updated:
# (use “git add …” to update what will be committed)
# (use “git checkout – …” to discard changes in working directory)
#
# modified: readme.txt
#
# Untracked files:
# (use “git add …” to include in what will be committed)
#
# LIENCES no changes added to commit (use “git add” and/or “git commit -a”)

这里提示我们的Readme.txt“ Changed but not updated”,修改了但是没有提交,而LIENCES从来没有添加过,是“Untracked ”状态。然后我们使用git add命令把两个文件从工作区添加到版本库中:

$ git add readme.txt LIENCES

再用git status查看:

[zhangxiyu@localhost learngit]$ git status
# On branch master
# Changes to be committed:
# (use “git reset HEAD …” to unstage)
#
# new file: LIENCES
# modified: readme.txt
#

现在,暂存区的状态就变成这样了:

这里写图片描述

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。然后就可以提交了:

[zhangxiyu@localhost learngit]$ git commit -m “LIENCES”
[master2564b30] LIENCES 1 files changed, 1 insertions(+), 1 deletions(-)
create mode 100644 LIENCES

再次查看状态:

[zhangxiyu@localhost learngit]$ git status
# On branch master nothing to commit (working directory clean)

整个世界清净了~工作区是干净的。

现在版本库变成了这样,暂存区就没有任何内容了:
这里写图片描述

这就是Git做的所有事情,弄明白之后就可以进行下面的内容了。
(本篇所有图片来源于原教程~)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值