Git学习笔记二
版本回退
- 先通过修改readme.txt再进行一次添加提交来复习学习笔记一中的知识。如图:
- 现在介绍
git log
命令,这是用来查看我们提交的历史记录,如图
如果觉得信息太多,可以使用
git log --pretty=oneline
来简化输出信息,使其更加清晰,如图
现在我们进行版本回退,首先HEAD指的是当前版本,HEAD^是上一版本,HEAD^^是上上版本,如果是n次前的版本,应当是HEAD~n,我们可以用
git reset
命令来完成版本回退,现在输入git reset --hard HEAD^
,看看现在的readme.txt文档是否变成了上一次修改的,如图
现在我们已经学会了如何进行版本回退(除了用HEAD指针之外,也可以用序号(那串16进制数字)来检索),但是现在我们面临一个问题,如果我们进行了版本回退,但是当前的版本就会被覆盖掉,在log中也不能显示,可是如果我们想再回到那个版本该如何做呢?
方法是有的,只要你能得到你想要的那个版本的
commit id
(16进制序号),就能够通过git reset
命令回去。如果你当前窗口未关闭,那么你可以直接上翻,可能可以找到之前的commit id
,如果窗口关闭了,也可键入git reflog
来查看你的命令记录,从而找到commit id
,如图
工作区和暂存区
- 工作区(Working Directory)就是你在电脑里能看到的目录,比如我们使用的
learngit
文件夹就是一个工作区。 - 版本库(Repository)是指在工作区里面的隐藏目录
.git
,这个目录不属于工作区,而是Git的版本库。 - Git的版本库里存了很多东西,其中最重要的就是称为
stage
的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。如图
- 在学习笔记一中,我们将文件往Git版本库里添加的时候,是分两步执行的:
- 第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区。 - 第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在git commit
就是往master
分支上提交更改。 - 简单来说,就是add的文件全部放到暂存区,然后commit一次性提交暂存区的所有修改。
- 第一步是用
- 由于Git是管理修改而不是管理文件,所以,每次修改,如果不
add
到暂存区,那就不会加入到commit
中。
撤销修改
- 现在学习一个新的命令
git checkout -- file
,可以将文件在工作区的修改全部撤销。 - 比如
git checkout -- readme.txt
,这里有两种情况:
- 一种是
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。 - 一种是
readme.txt
已经添加到暂存区后,又作了修改,现在撤销修改就回到添加到暂存区后的状态。 - 总之就是让这个文件回到最近一次
git commit
或git add
的状态。
- 一种是
- 这里的
--
很重要,如果丢失,那么就变成了另一种操作。 - 我们可以用一个类似的操作也达到撤销暂存区修改的目的,
git reset HEAD file
,将暂存区清空。
删除文件
rm
可以将文件从工作区删除。git rm
命令是将文件从工作区和暂存区中删除,并且还要执行一次git commit
命令才能够在版本库中删除。例如$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt倘若删错了,我们可以用
git checkout -- file
将版本库里的文件替换工作区的版本,无论工作区是修改还是删除,都可以一键还原。(只会还原到最新版本,不能保存删除之前短时间的修改。)
本文是本人学习廖雪峰git教程过程中的学习记录,详细教程可以参见廖雪峰Git教程