工作空间初始化

命令行进入任意自己想要做工作空间的目录使用 git init 命令即可初始化一个空白的git 工作空间,目录中有没有文件并不影响版本库的创建

$ git init
Initialized empty Git repository in /Users/zhengbing/git/.git/

添加文件到版本仓库

添加文件到版本库,文件一定要在版本库的目录或子目录中才能被管理 新建文件 readme.txt

$ touch  readme.txt

打开文件并在文件中加入内容

Git is a version control system. Git is free software. 添加文件到本地版本仓库

$ git add readme.txt

add 命令可一次提交多个文件 直接跟在命令后面用空格隔开即可

$ git add readme1.txt  readyou.txt

提交文件到版本仓库

$ git  commit  -m 'add readme.txt'
[master (root-commit) 9235ffd] add  readme.txt
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

-m 后面跟的是本次提交的说明,养成良好的习惯,每次提交版本写好对应版本的详细说明,便于后期管理版本 提交结果告诉我们,一个文件发生改变,新增了两行

版本库状态查看

查看版本库当前状态 修改readme.txt

Git is a distribution version control system. Git is free software.

$ git status  
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)


	modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

返回结果告诉我们,readme.txt文件被修改了,但是还没有准备提交的修改

如此,我们可以看一下修改的内容

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..812ab8a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distribution version control system.
 Git is free software.

diff 命令用来比较当前工作区版本和版本库中的版本之间的different

命令返回的结果告诉我们,修改的内容。然后我们准备提交内容,同样需要先add

$ git add readme.txt

添加完文件之后,再次查看本地仓库的status

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   readme.txt

上面返回的结果表示,一个修改的文件文件:readme.txt 已经做好了提交的准备

$ git commit -m 'update readme.txt'
bogon:git zhengbing$ git  commit  -m 'update  readme.txt'
[master 56fb09b] update  readme.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

提交完成,完成后我们再查看一下版本库的status看有啥不一样

$ git status
On branch master
nothing to commit, working tree clean

没有内容可提交

版本日志

git log 命令可以显示从最近到最远的提交日志

$ git  log
commit 7dc80a9b6475908835ab78562d7db68fda83757c (HEAD -> master)
Author: zhengbing <mydreambing@126.com>
Date:   Sun Oct 13 14:42:11 2019 +0800

    append  GPL

commit 56fb09bdfefc467e9b2f5aba2060c215c19f68c9
Author: zhengbing <mydreambing@126.com>
Date:   Sun Oct 13 00:28:24 2019 +0800

    update  readme.tct

commit 9235ffdcced6c829b3f0fb991d5548c14fe49dc7
Author: zhengbing <mydreambing@126.com>
Date:   Sat Oct 12 23:26:45 2019 +0800

    add  readme.txt

此处,我们有三次提交记录,如果嫌日志信息太多,可以试试使用 —pretty=online,对日志信息进行美化

$ git log  --pretty=oneline
7dc80a9b6475908835ab78562d7db68fda83757c (HEAD -> master) append  GPL
56fb09bdfefc467e9b2f5aba2060c215c19f68c9 update  readme.tct
9235ffdcced6c829b3f0fb991d5548c14fe49dc7 add  readme.txt

版本回退

ok,现在开始把版本回退到append GPL 之前的一个版本

git 中HEAD指向版本,HEAD^ 指向版本的上一个版本,HEAD^^指向当前版本的上上个版本,依次类推,上一百个版本使用HEAD100个^ ,实际上可以写成 HEAD-100

git reset 对版本进行重置 回退到上一个版本 update readme.tct

$ git reset --hard HEAD^
HEAD is now at 56fb09b update  readme.tct

好了,版本重置成功了,看下日志记录,

看下文件内容

vi readme.txt
Git is a distribution version control system.
Git is free software.

明显文件中的distributed under the GPL 消失了,版本回退完成

看一下版本库的日志记录情况

$ git log
commit 56fb09bdfefc467e9b2f5aba2060c215c19f68c9 (HEAD -> master)
Author: zhengbing <mydreambing@126.com>
Date:   Sun Oct 13 00:28:24 2019 +0800

    update  readme.tct

commit 9235ffdcced6c829b3f0fb991d5548c14fe49dc7
Author: zhengbing <mydreambing@126.com>
Date:   Sat Oct 12 23:26:45 2019 +0800

    add  readme.txt

通过命令返回可以看到,当前的版本HEAD指向了update readme.tct 之前的 append GPL 已经不存在了

当然还可以继续往回重置,一直到最初版本

那么问题来了,如果重置之后,再想回到重置之前的版本咋办呢?

方法其实与重置到HEAD^的方法一样,只是这里将HEAD^ 换成了想要重新回到的版本的版本号,这里需要注意的地方:

  1. 需要有版本号作为索引,才能够重置到制定版本
  2. 版本号可以不用记那么长一段,但是也不要写太少,防止有同样的版本号,一般我们写个5-6位基本上能够定位到唯一版本了
$ git  reset  --hard  7dc80a9
HEAD is now at 7dc80a9 append  GPL

还原了我们被回退掉的版本,命令返回提示我们HEAD版本已经指向了 append GPL 的版本,我们查看下内容

vi readme.txt
Git is a distribution version control system.
Git is free software distributed under GPL.

Amazing 回来了,神奇的git

Git 版本切换的速度非常的快,为什么呢?这里用到了上面提到过的HEAD,HEAD是git中的一个指针,总是指向当前版本,当进行版本reset之后,实际上git只是将HEAD指针指向了另一个提交版本,并且将文件修改到对应版本的文件内容

那么问题又来了?如果版本已经回退了,隔了一段时间之后想要还原到回退之前的版本,但是又不记得版本号咋办?

又一个命令也许能帮我们解决这个问题git reflog 可以让我们看到当前版本库中执行过的命令历史记录

$ git  reflog
7dc80a9 (HEAD -> master) HEAD@{0}: reset: moving to 7dc80a9
56fb09b HEAD@{1}: reset: moving to HEAD^
7dc80a9 (HEAD -> master) HEAD@{2}: commit: append GPL
56fb09b HEAD@{3}: commit: update readme.tct
9235ffd HEAD@{4}: commit (initial): add readme.txt

如上,命令返回结果给我们展示了,我们在版本中最近使用过的命令,以及对应版本号前缀,我们找到第一个元素 版本号,再结合前面我们提到过的 git reset —hard [version No.] 就可以重置到版本库中的任意版本了

总结:
使用到的命令:

git init git add [文件名]| [.(表示当前目录)] git commit -m 'add readme.txt' git status -- 查看版本库的状态 git reset —hard [version No.] git log
git log --pretty=oneline 展示美化后的日志 git reset --hard HEAD^ 版本回退 HEAD^^ HEAD-100 git reflog 执行过的命令历史记录