7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法

下载初始化仓库

一:使用短的SHA-1值,看单一commit对象 以及查找分支指向的commit的SHA-1值

$ git log
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第1张图片
查看所有的commit信息
$ git show c13a95
$ git show c13a954827345b01eec8bd29d462e239b0bde176
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第2张图片
用短的SHA-1和用长的SHA-1结果一样,小项目一般SHA-1用短的就可以,超级大的项目才会出现短的SHA-1指向两个对象,那就再用长一点的,用8-10就算极限啦,linux内核也就用11位
$ git log --abbrev-commit --pretty=oneline
git log 的--abbrev-commit参数列出默认前7位SHA-1值,前提是保证它们是独一无二的,如果会重复,这个命令会自动输出更长一点的,比如8位SHA-1值
$ git show master
$ git show c13a954827345b01eec8bd29d462e239b0bde176
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第3张图片
git命令里面,任何需要用commit的SHA-1值的地方都可以用指向它的branch名字代替,就是指branch的最后一个commit
$ git rev-parse master
$ git rev-parse HEAD
使用低级命令git rev-parse + 分支名字或者HEAD 可以看分支指向的commit的SHA-1
$ git reflog
git reflog查看HEAD指向分支指向的commit的历史记录
$ git checkout -b test
$ git checkout master
新建并且换到test分支

然后再切换回master
$ git log --abbrev-commit --pretty=oneline --all --decorate --graph
现在的分支结构图
$ git reflog
再次查看reflog,可以看到虽然master和test两个分支一直在c13a954这个commit上,但是reflog还是进行啦记录,前三行的SHA-1是一样的。
$ git show HEAD@{2}
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第4张图片
用HEAD@{2},其实就等于git show c13a954 ,就是上一张图reflog显示的信息中的SHA-1值对应的commit的详细信息。
$ git log -g
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第5张图片
以log的形式显示reflog的信息,就是比git reflog更加完整的信息,里面还是有HEAD@{1}这种信息
$ git show master@{yesterday}
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第6张图片
git show还可以看 master分支昨天所在的commit信息
$ git show HEAD@{1.hours.ago}
$ git show master@{1.hours.ago}
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第7张图片
因为HEAD现在处于master分支,所以上面两个命令结果相同,都显示对应的那个commit的详细信息
$ git show test@{3.hours.ago}
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第8张图片
而对于刚刚创建的test分支,输出结果第一行说啦,3小时前没有test,但还是显示啦当前所指向的那个commit的详细信息

二:查看祖先commit信息,已对仓库进行一些修改,下载仓库

$ git log --abbrev-commit --pretty=oneline --all --decorate --graph
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第9张图片
修改后,仓库的分支结构图
$ git show HEAD^
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第10张图片
从上面的分支结构图可知,现在HEAD指向test分支,test位于fe36b80这个commit上,而HEAD^表示HEAD的父亲,那就是分支结构图中那个fff145commit啦,所以结果就是这个commit的详细信息
$ git show fff1455^
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第11张图片
上面分支结构图中,fff1455是一个merge commit,所以有两个祖先,git show fff1455^代表merge时所在分支的祖先,而merge操作是git merge master,当时在test分支,所以显示的test分支上的那个祖先
  $ git show fff1455^2
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第12张图片
在^符号后加上数字2,代表的就是另一个分支master上的祖先啦
$ git show HEAD~
$ git show HEAD^
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第13张图片
上面的两个命令等价,结果都是当前commit的第一个祖先
$ git show HEAD~3
$ git show HEAD^^^
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第14张图片
这两个命令的结果也是一样的,都是当前所在commit在test分支上的第三个祖先c13a95
$ git show HEAD~^2
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第15张图片
仓库的分支结构图

7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第16张图片
~和^两个符号也可以组合使用,~代表第一个祖先,^2代表位于master分支上的第二个祖先,也就是e2e1946
$ git show HEAD~^
$ git show HEAD~~
$ git show HEAD^^
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第17张图片
上面三个命令也等价,都表示但前所在分支(test分支)上的第二个祖先fde260

查找某个范围内的commit对象

7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第18张图片
分支结构图

两个点,表示查看 experiment上还没有合并到 master的commit,换句话说:所有 experiment能读取到但 master读取不到的commit对象

$ git log master..experiment
D
C

反过来就是E、F这两个master分支上的还没有合并到experiment的commit对象

$ git log experiment..master
F
E

所以,下面就是HEAD本地还没有推送到服务器的commit对象啦

$ git log origin/master..HEAD

符号..的两边有一边缺失,Git会自动用HEAD代替

git log origin/master..

再下载一下仓库

$ git log --abbrev-commit --pretty=oneline --all --decorate --graph
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第19张图片
master\test\experiment三个分支,有1个共同的commit,三个各自的commit
$ git log master..test
$ git log ^master test
$ git log test --not master
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第20张图片
上面三个命令等价,都是显示test有而master没有的commit,也可以说是没有合并到master的test上的commit 符号`^` 和 选项`--not`都表示不显示存在于该分支上的commit
$ git log test master --not experiment
$ git log test master ^experiment
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第21张图片
使用符号`^` 和 选项`--not`,可以写多个branch,这是`..`符号做不到的,用这两种符号,可以查看多个branch,比如上面的命令显示test和master分支的commit且不显示experiment能够触及的commit
$ git log test...master
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第22张图片
三个点`...`的符号,表示显示test、master的所有commit,但不显示两个分支共有的commit
$ git log --left-right test...master
7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法_第23张图片
这个命令中`--left-right`,就是用来指出列出的commit所属的分支,图里面可以看到,每个commit和SHA-1值之间都有`>`和`<`箭头,表示commit属于哪一边。

你可能感兴趣的:(7.1 Git Tools - Revision Selection (git log/git show/git rev-parse/git reflog) 各种查看commit信息的方法)