在开始之前,首先介绍一下git仓库的三个部分,这是必须要了解的三个概念 ——3分钟
工作目录,暂存区,master分支
简单地说,
你平时在浏览和编辑的那些文件所在的区域就叫工作目录,工作目录是你能直接接触到文件的地方
当你在工作目录编辑完文件,然后用git add命令添加文件的时候,这个文件实际上被添加到了暂存区
当你一次或多次添加了文件,最后用git commit命令提交的时候,这些文件的信息就会从暂存区同步到master分支
一张图表示
图片来自网络,侵删
git log
回到主题,当你提交完毕后,如何查看自己已经进行过的操作呢?git log可以帮助你做到这一点 ——1分钟
$ git log
commit d837e2cd9e964b813ef2c5cb40bb3ce9af68fd22
Author: Name <xxx@xxx.com>
Date: Mon Jul 18 19:23:03 2016 +0800
add readme.txt
commit后的那一串表示此次操作的标识
author 操作者
date 操作时间
最后是你-m后面留下的提示信息
一大串看得眼花缭乱,使用
$ git log --pretty=oneline
命令可以简化信息
d837e2cd9e964b813ef2c5cb40bb3ce9af68fd22 add readme.txt
只显示标识和提交信息
那么,有了这些信息有什么用呢,这涉及git的主要作用——版本控制了 ——五分钟
git reset
让我们回到工作区,在刚才新建的readme.txt里添加几行文字,假设你在里面打了一串乱码
保存之后用git status查看当前状态
$ git status
此时你回想起要先git add,然后执行git commit,并且你在执行git commit时留下了一条叫“asdf”的信息
$ git add readme.txt
$ git commit -m "asdf"
显示
[master 5a65804] asdf
1 file changed, 2 insertions(+)
然后你用git log --pretty=oneline查看刚才的操作
5a65804fefe8abeea5b862304032bfc9aa435460 asdf
d837e2cd9e964b813ef2c5cb40bb3ce9af68fd22 add readme.txt
你发现多了一条名为asdf的操作
这时你就可以进行版本回退的操作了
$ git reset --hard d837
--hard不能丢,hard后面接标识,一般取前4位就行
顺便一提,git里的参数,如果字母数量大于1个,一般都是两条横杠,比如之前的--pretty
重新打开文本,发现恢复到一个字没有的状态
当然,不仅可以回退,当你回退后又想前进时,同样用这个命令,标识改成你想要的版本
$ git reset --hard 5a65
HEAD is now at 5a65804 asdf
这是一个用来跳跃版本的命令,在跳跃的同时修改暂存区和工作区
这个命令的快捷方式
$ git reset --hard HEAD^
HEAD^代表上一次提交时的版本
同理HEAD^^代表上上个版本,几个^代表几个版本
其实,git log命令存在一个隐含的小问题,那就是只能显示此次会话的操作,假设你回退了几个版本,关闭bash再打开,使用这个命令会发现回退的那几个版本看不到标识了,想再前进好像不可能了,实际上,你可以用这个命令
$ git reflog
它能让你看到你所有的操作,试试看