GitHub代码管理学习之路(三)

来源:互联网 发布:仿真软件proteus下载 编辑:程序博客网 时间:2024/06/16 08:25

本文将详细讲述时光机穿梭,让我们来看看他究竟是何(吹)方(逼)神(谈)圣(嘘)

前言

想了解时光机穿梭,就得先熟悉下两个命令
1. 查看状态——git status
2. 查看差异——git diff

首先,我们来本地修改上一篇文章中test.docx的内容(自定义,例如我就是添加五行“有句妈卖批不知当讲不当讲”)
现在,运行$ git status看看会不会出现什么神奇的效果
这里写图片描述

你没看错,就是这么的不神奇~~~言归正传,出现这么一大串的英文,其实就是告诉你,test.docx文件内容已被修改,提示你可以提交到仓库!虽然告诉我们test.docx被修改了,但如果能看看具体修改了什么内容,自然是很好的。所以就用到查看差异的命令

现在,运行$ git diff test.docx看看会不会出现什么神奇的效果
这里写图片描述
就是这么神奇的把文件的差异清晰明了地展现出来给你看~
git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式

现在我们可以执行上篇文章的提交二步曲(不熟悉的看官,可以回头看看上一篇文章)~
有兴趣的看官可以在执行完add之后,再执行一次查看状态命令

版本回退

学习完两个命令之后,开始本文的正式内容
首先,回顾下test.docx文件一共有几个版本被提交到仓库里了!问题来了,如果忘记了怎么办!这时候git就站出来说了句——“天空飘来五个字,那都不是事”!
这个问题,只需要用$ git log命令来解决就好
这里写图片描述
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是 最后一次修改,最早的一次是This is test。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:

补充:git log只能作用于当前窗口未关闭过才能显示!历史记录是$ git reflog

重点来了,现在我们要做的就是把当前版本回退到上一个版本!
执行$ git reset --hard HEAD^

执行结果没有意外将会是:HEAD is now at "提交ID" "上一个版本的备注"

上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
再去看test.docx的时候,里面的‘妈卖批’已经由七行变成三行了!
这时候有人问,如果我回退成功之后,发现我之前那个版本才是对的,想回滚!对于这个问题,我只能说很抱歉,我还真有办法让你回滚!

只需要将 HEAD^ 改为 需要目标版本的提交ID(commit — a5e247c54a4f66767db1b830cf196d1c46443d2d,其实也不用填全部,只需填前面几个,即:$ git reset --hard a5e247c,这样git就会自动寻找了!)
关于提交ID的补充:是一个SHA1计算出来的一个非常大的数字,用十六进制表示
下面用两张图解释下git的回滚机制
这里写图片描述
这里写图片描述
Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向第一次修改 改为指向This is test
图片有点抽象,勿喷~~~~缺乏艺术细胞

工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

  • 工作区
    就是你在电脑里能看到的目录
  • 版本库
    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
    这里写图片描述
    分支和HEAD的概念后面将会提及
    上篇文章中的提交二步曲,现在再来重温下:
    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
    你可以简单理解为,第一步的操作是把文件通通放到暂存区,然后第二步的操作是一次性提交暂存区的所有修改。
    提交之后,抽象图的内容将会如下
    这里写图片描述
    你会发现,暂存区就会感觉“身体”被掏空一般的干净~

这章的内容比较重要,如果有心学习的,请务必理解透暂存区!这样对后面学习的帮助会很大
写的有些乱,不知道各位看官有什么想法!可以留言喔~(大神请轻喷=_=)!