Mac中Git的简单实用(2) --- Git基本命令(2)

今天我来介绍下Git,Git是一款免费、开源的分布式版本控制系统。
我们在上一个学习学习add、commit、status、diff、checkout、reset、rm命令。
这一章,我们学习log、reset、reflog、checkout、rm

Mac中Git的简单实用(1) — Git基本命令(1)

1、版本回退

现在,我们再对git.txt文件进行一次修改,并提交到仓库当中,修改如下:
git is ok and good.
git is nice and great.
提交情况:
MBP:git qiuyu$ git add git.txt
MBP:git qiuyu$ git commit -m "the third release"
[master 9e4ea15] the third release
 1 file changed, 1 insertion(+), 1 deletion(-)
MBP:git qiuyu$ 

下面我们回顾一下总共提交了哪些版本:

第一个:
git is ok.
git is nice.
第二个:
git is ok and good.
git is nice.
第三个:
git is ok and good.
git is nice and great.

为了区别几次提交,我们可以通过git log命令进行查看
Mac中Git的简单实用(2) --- Git基本命令(2)_第1张图片

如此,我们可以看到,之前提交了三次,具体的时间,提交的人,
还有一个SHA1计算出来的一个非常大的数字用于区分所有人提交的内容。

下面,我们实现版本回退:

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,
也就是最新的提交9e4e......cf(注意我的提交ID和你的肯定不一样),
上一个版本就是HEAD^,上上一个版本就是HEAD^^,
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

现在我们来把当前版本the third release回退到the second release,我们使用git reset命令
git reset

我们通过cat指令查看git.txt中的内容
MBP:git qiuyu$ cat git.txt
git is ok and good.
git is nice.
内容已经变为了第二个版本

现在再我们在通过git log来查看
Mac中Git的简单实用(2) --- Git基本命令(2)_第2张图片

这里可以看到,第三个版本已经不见了,但是这时候我们想回退到第三个版本,我们就需要之前的commit id来实现了。
通过git reset来实现,版本号没必要写全,前几位就可以了

reset
cat

Git提供了一个命令git reflog用来记录你的每一次命令:
这里写图片描述

2、工作区和暂存区

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

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

3、撤销修改

一、未add到暂存区

首先,我们在git.txt文件中加了一个我的邮箱
qiuyu93422@163.com

Mac中Git的简单实用(2) --- Git基本命令(2)_第3张图片

你可以发现,Git会告诉你,git checkout -- file可以丢弃工作区的修改:

$ git checkout -- git.txt
命令git checkout -- git.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是git.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是git.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

现在,看看git.txt的文件内容:

git status

内容变回了上次commit的版本。

二、已经add到暂存区

git.txt文件内容:
git is ok and good.
git is nice and great.
[email protected]
我们使用了add命令将文件加入了暂存区,但是没有commit,我们先用git status查看

Mac中Git的简单实用(2) --- Git基本命令(2)_第4张图片

Git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

Mac中Git的简单实用(2) --- Git基本命令(2)_第5张图片

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
再用git status查看一下,现在暂存区是干净的,工作区有修改。在通过上面所说的checkout来丢弃工作区的修改。

4、删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

$ rm git.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:
Mac中Git的简单实用(2) --- Git基本命令(2)_第6张图片

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令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 -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

你可能感兴趣的:(命令,git,status,系统,库)