1、git status 命令查看工作区状态
例如:当我们把readme.txt文件修改成如下内容的时候:
Git is a distributed version control system.
Git is free software.
可以运行 git status 命令查看结果。
上面的命令告诉我们,文件被修改了,但是还没有准备提交的修改。
2、git diff 命令查看具体修改的内容
可以从上面的命令看到,我们在第一行添加了一个“distributed ” 单词。
3、 git log 命令查看历史记录(查看一共有几个版本提交到Git仓库了)
git log 命令显示从最近到最远的提交日志。最近一次是 append GPL,最早一次是 wrote a readme file,如果嫌输出的信息太多,看得眼花缭乱,那么可以试试在 git log 后面加上参数 --pretty=oneline 。
备注:上图中 f1344ede5........ 这一串是用十六进制表示的 commit id (版本号)。
4、 git reset 命令回退到上一个版本
现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:
在Git中用 HEAD 表示当前版本,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成 HEAD~100。
看看readme.txt的内容是不是版本add distributed:
果然,如下:
cat readme.txt
Git is a distributed version control system.
Git is free software.
我们在用 git log 命令看看现在版本库的状态:
最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是f1344ed...,于是就可以指定回到未来的某个版本:
版本号没必要写全,前几位就好了。
再小心翼翼地看看readme.txt的内容:
cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
果然,又回来了。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的 HEAD 指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL 改为指向add distributed 。
5、 git reflog 记录每一次命令
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在Git中,总是有后悔药可以吃的。当你用 git reset --hard HEAD^ 回退到 add distributed 版本时,再想恢复到append GPL,就必须找到 append GPL 的 commit id。Git提供了一个命令 git reflog 用来记录你的每一次命令:
终于舒了口气,第二行显示 append GPL 的 commit id 是 f1344ed,现在,你又可以乘坐时光机回到未来了。
小结:
HEAD 指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id 。
穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。
6、git diff HEAD --file 查看工作区和版本库里面最新版本的区别。
给 readme.txt 加一行内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.
然后添加:
然后再修改readme.txt 文件:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
提交:
提交后,再看看状态:
可见,第二次的修改没有被提交。
Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
提交后,用 git diff HEAD -- readme.txt 命令可以查看工作区和版本库里面最新版本的区别:
可见第二次修改确实没有被提交。
那怎么提交第二次修改呢?你可以继续 git add 再 git commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了。
友情链接: