Git的版本回退:
如果想查看版本库中的历史记录,可以通过git log 命令可以查看到所以的的版本记录信息。

$ git log
commit 53b0c21600dcebc3b7d768a83c02f25cfc045b44
Author: BaiKeyang <baikeyang@vip.qq.com>
Date:   Thu Jan 5 11:30:43 2017 +0800

    添加了一段文字 Add Time:2017-01-05

commit 4b7b1694d16febe3595be4924b8a6492b83b3e84
Author: BaiKeyang <baikeyang@vip.qq.com>
Date:   Wed Jan 4 12:54:44 2017 +0800

    修改描述文档

commit 068eefede73633fdabc2bb60fda6369e2e0b0f11
Author: BaiKeyang <baikeyang@vip.qq.com>
Date:   Wed Jan 4 09:32:28 2017 +0800

    wrote a readme file


Git的提交日志显示是从时间最近到最远显示的,如果感觉上面的信息太多,不方便查看可以试试加上参数--pretty=oneline的下面这个命令:

$ git log --pretty=oneline
53b0c21600dcebc3b7d768a83c02f25cfc045b44 添加了一段文字 Add Time:2017-01-05
4b7b1694d16febe3595be4924b8a6492b83b3e84 修改描述文档
068eefede73633fdabc2bb60fda6369e2e0b0f11 wrote a readme file

上面信息中,那一长串类似 53b0c21600dcebc3b7d768a83c02f25cfc045b44 就是commit ID版本号。Git的版本号不想SVN的版本,SVN的版本是1,2,3……n 逐个递增的数字,而Git的版本号是一个SHA1计算出来的一个非常大的数字,用十六进制表示。所以每个人的commit id 肯定都不一样咯。

在实际的使用过程中,经常会遇到一些需要回退到旧版本的操作。在回退的到旧的版本之前,首先需要知道当前是哪个版本。在Git中,HEAD表示当前版本,也就是最新提交的53b0c21600dcebc3b7d768a83c02f25cfc045b44(每个人的版本号都是不一样的),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^显然不是个方法,所以可以写成HEAD~100。
要回退到版本可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at 4b7b169 修改描述文档

看看readme.txt的内容是不是上个版本的内容,使用cat 命令查看:

$ cat readme.txt
Git is a version control system.Hello Git.
Git is free software.

readme.txt的内容已经回到上个版本,通过git log可以查看到当前版本库的信息:

$ git log
commit 4b7b1694d16febe3595be4924b8a6492b83b3e84
Author: BaiKeyang <baikeyang@vip.qq.com>
Date:   Wed Jan 4 12:54:44 2017 +0800
    修改描述文档
commit 068eefede73633fdabc2bb60fda6369e2e0b0f11
Author: BaiKeyang <baikeyang@vip.qq.com>
Date:   Wed Jan 4 09:32:28 2017 +0800
    wrote a readme file

当操作回退时发现回退的版本不是自己想要的版本内容,需要重新操作操作之前的版本时,可以在命令窗口中找到之前版本的commit id,然后回到指定版本:

$ git reset --hard 53b0c21600dcebc3b7d768a83c02f25cfc045b44
HEAD is now at 53b0c21 添加了一段文字 Add Time:2017-01-05

在指定版本的时候没必要写全,只需要写前几位就可以了,如

$ git reset --hard 53b0c21
HEAD is now at 53b0c21 添加了一段文字 Add Time:2017-01-05

如果我们在回退完之后就只顺手关闭了命令窗口,也没有关系。可以通过git reflog 查看你每一从操作命令:

$ git reflog
53b0c21 HEAD@{0}: reset: moving to 53b0c21600dcebc3b7d768a83c02f25cfc045b44
4b7b169 HEAD@{1}: reset: moving to HEAD^
53b0c21 HEAD@{2}: reset: moving to 53b0c21600dcebc3b7d768a83c02f25cfc045b44
4b7b169 HEAD@{3}: reset: moving to HEAD^
53b0c21 HEAD@{4}: commit: 添加了一段文字 Add Time:2017-01-05
4b7b169 HEAD@{5}: commit: 修改描述文档
068eefe HEAD@{6}: commit (initial): wrote a readme file

前面 53b0c21 就是commit id,我们可以通过commit id 也可以回到你想要的那个版本。

HEAD指向的版本是当前版本,Git允许我们在版本的历史之间来回穿梭,使用命令 git rest --hard commint_id
回退之前可以使用git log 查看提交历史,以便确定需要退回哪个版本
要重新回到 退回操作之前,使用git reflog查看命令历史,以便确定要回到未来的哪个版本

Git的暂存区理解:

在我们的工作区域中有一个隐藏的目录.git,这个不算工作区,而是Git的版本库。
Git版本库中有很多的东西,其中最重要的就是stage(或者叫index)暂存区 、 master(分支) 和 HEAD指针。Git在初始版本库时会自动创建第一个分支master,以及指向master的一个指针HEAD。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;现在,暂存区的状态就变成这样了:
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的,暂存区就没有任何内容了:
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。

标签: Git, Git学习, Git暂存区, Git版本回退, 版本回退, Git查看提交历史, Git查看命令历史

添加新评论