声明:文章原稿来源于恩师稀哥。
1. 工作原理
我们来简单说明一下git的工作原理
① 在版本库中创建文件的时候,就有了文件的第一个版本,于此同时会生成一个指针指向这个版本
② 当修改了code.txt中的内容以后,就生成了第二个版本,但是这个版本是依赖上一个版本的,在这个版本中仅仅会记录文件发生了那些修改。在有了一个新版本之后,这个指针会指向最新的版本。
③ 通过修改指针的位置可以实现回退到某个版本,表示方式有两种,一种是用^,一种使用~,如下
- HEAD^ 或者 HEAD~1:表示上一个版本
- HEAD^^ 或者 HEAD~2:表示上两个版本
通过上面的方式回退到第一个版本之后,指针就指向了版本1
2.基本使用
- 创建一个版本库,新建目录git_test,在git_test目录下创建一个版本库,命令:
git init
# mkdir /git_test
# cd /git_test/
# git init
Initialized empty Git repository in /git_test/.git/
# ls -a
. .. .git
可以看到在git_test目录下创建了一个.git隐藏目录,这就是版本库目录。
- 在
git_test
目录下创建一个文件code.txt
,写入一行内容如下
# echo "first line">> code.txt
# cat code.txt
first line
- 使用如下两条命令可以创建一个版本,创建版本需要两步:
# git add code.txt
# git commit -m 'v1'
[master (root-commit) c410627] v1
1 file changed, 1 insertion(+)
create mode 100644 code.txt
- 查看版本记录,命令是
git log
# git log
commit c4106273b0b87ac6f42042589663900af3617837 >>>序号
Author: root<root@localhost.localdomain> >>>提交者
Date: Thu Dec 27 19:54:24 2018 +0800 >>>日期
v1 >>>版本
- 继续编辑code.txt,在里面增加一行。
# echo "second line">>code.txt
# cat code.txt
first line
second line
- 使用如下命令再创建一个版本并查看版本记录
# echo "second line">>code.txt
# cat code.txt
first line
second line
# git add code.txt
# git commit -m 'v2 -newversion'
[master 1a3efe2] v2 -newversion
1 file changed, 1 insertion(+)
# git log
commit 1a3efe201b6e7fc66aa34f4ae9333a9ce2d54bb6
Author: root<root@localhost.localdomain>
Date: Thu Dec 27 20:02:39 2018 +0800
v2 -newversion
commit c4106273b0b87ac6f42042589663900af3617837
Author: root<root@localhost.localdomain>
Date: Thu Dec 27 19:54:24 2018 +0800
v1
- 现在如果想要回到某一个版本,可以使用如下命令:
git reset --hard HEAD^
其中HEAD表示当前最新版本,HEAD^ 表示当前版本的前一个版本,HEAD^^表示当前版本的前前个版本,也可以使用HEAD~1 表示当前版本的前一个版本,HEAD~100表示当前版本的前100版本。
# git reset --hard HEAD^
HEAD is now at c410627 v1
# git log
commit c4106273b0b87ac6f42042589663900af3617837
Author: root<root@localhost.localdomain>
Date: Thu Dec 27 19:54:24 2018 +0800
v1
# cat code.txt
first line
执行命令后使用git log查看版本记录,发现现在只能看到版本1的记录,cat code.txt查看文件内容,
现在只有一行,也就是第一个版本中code.txt的内容。
- 假如我们现在又想回到版本2,这个时候该如何操作呢?可以使用命令
git reset --hard 版本号
从上面第6步的操作结果看看一看到版本2的版本号为1a3efe201b6e7fc66aa34f4ae9333a9ce2d54bb6
# git reset --hard 1a3efe
HEAD is now at 1a3efe2 v2 -newversion
现在发现版本2有回来了。可以cat code.txt查看其里面的内容如下
# cat code.txt
first line
second line
- 假如说上面的终端已经关闭了,看不到上面的版本好了该怎么回退版本呢?
①首先执行命令将版本回退到版本1
# git reset --hard HEAD^
HEAD is now at c410627 v1
# git log
commit c4106273b0b87ac6f42042589663900af3617837
Author: root<root@localhost.localdomain>
Date: Thu Dec 27 19:54:24 2018 +0800
v1
②把当前终端关闭,然后打开新的终端,已经无法看到之前操作留下的版本2的版本号了
这里就要用到了 git reflog
命令来查看我们的操作记录
# git reflog
c410627 HEAD@{0}: reset: moving to HEAD^
1a3efe2 HEAD@{1}: reset: moving to 1a3efe
c410627 HEAD@{2}: reset: moving to HEAD^
1a3efe2 HEAD@{3}: commit: v2 -newversion
c410627 HEAD@{4}: commit (initial): v1
③可以看到版本2的版本号,在使用命令进行回滚
# git reset --hard 1a3efe2
HEAD is now at 1a3efe2 v2 -newversion