工作空间初始化
命令行进入任意自己想要做工作空间的目录使用 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^ 换成了想要重新回到的版本的版本号,这里需要注意的地方:
- 需要有版本号作为索引,才能够重置到制定版本
- 版本号可以不用记那么长一段,但是也不要写太少,防止有同样的版本号,一般我们写个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 执行过的命令历史记录