查看与对比历史记录-Git详解(4)

概要

  • git show
  • git log
  • git diff

命令格式: git show

1
2
3
4
5
6
7
8
9
[rb git_checkout_merge (master)]$ git log --oneline --decorate --graph --all
* 92297a8 (HEAD, master) merge fix_v0 to master
|\
| * 0b91750 (fix_v0) modify master.txt on fix_v0
* | 58bcff7 delete
|/
| * f2a8fa3 (test_branch) Initial commit on test_branch
|/
* 3354ddc (tag: v0, tag: INITIAL_COMMIT, refs/stash, v0, test_v0) Initial master.txt on master

3种写法等价

1
2
3
$ git show 92297a8
$ git show HEAD
$ git show master

结果

1
2
3
4
5
6
[rb git_checkout_merge (master)]$ git show 92297a8
commit 92297a8276575b58d09f5b71494c33a714000ab1
Merge: 58bcff7 0b91750
Author: kk <shuncle@outlook.com>
Date: Wed Jun 28 10:49:38 2017 +0800
merge fix_v0 to master

master 第一父提交和第二父提交表示方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[rb git_checkout_merge (master)]$ git lol
* 50b5bbd (HEAD, master) Merge branch 'm_t2' system auto use non-fast-forward-merge
|\
| * c038db8 (m_t2) add page.jsp on m_t2
| * ae9e153 add hello_master.txt on master
* | 6b2732f second edit on master
* | 54d4356 add readme.txt on master
|/
* 92297a8 merge fix_v0 to master
|\
| * 0b91750 (fix_v0) modify master.txt on fix_v0
* | 58bcff7 delete
|/
| * f2a8fa3 (test_branch) Initial commit on test_branch
|/
* 3354ddc (tag: v0, tag: INITIAL_COMMIT, refs/stash, v0, test_v0) Initial master.txt on master

1
2
3
4
5
6
7
8
[rb git_checkout_merge (master)]$ git show master
commit 50b5bbdba8245a2fe9128499b4765323765d274a
Merge: 6b2732f c038db8
Author: kk <shuncle@outlook.com>
Date: Wed Jun 28 12:30:04 2017 +0800
Merge branch 'm_t2'
system auto use non-fast-forward-merge
1
2
3
4
5
$ git show 6b2732f #查看第一父提交
$ git show master~ #查看第一父提交
$ git show master^ #查看第一父提交
$ git show master^2 #查看第二父提交
$ git show

使用 –stats 查看统计信息

1
2
3
4
5
^[[A[rb git_checkout_merge (master)]$ git show --oneline --stat master^2
c038db8 add page.jsp on m_t2
pages.jsp | 2 ++
1 file changed, 2 insertions(+)
[rb git_checkout_merge (master)]$

使用git show 查看tag 对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[rb git_checkout_merge (master)]$ git tag
INITIAL_COMMIT
v0
[rb git_checkout_merge (master)]$ git show v0
warning: refname 'v0' is ambiguous.
commit 3354ddca241c96a7d73b3290098f33a5fb9a1afa
Author: kk <shuncle@outlook.com>
Date: Tue Jun 27 22:26:12 2017 +0800
Initial master.txt on master
diff --git a/master.txt b/master.txt
new file mode 100644
index 0000000..1d2d96b
--- /dev/null
+++ b/master.txt
@@ -0,0 +1 @@
+Initial master.txt on master

查看 tree 对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[rb git_checkout_merge (master)]$ git show --format=%T master^2
7e3d3c81c19dd72e4ee7982eb333e14749d03cde
diff --git a/pages.jsp b/pages.jsp
new file mode 100644
index 0000000..8f0e29f
--- /dev/null
+++ b/pages.jsp
@@ -0,0 +1,2 @@
+this is a jsp file
+initial on m_t2
[rb git_checkout_merge (master)]$ git show 7e3d3c
tree 7e3d3c
hello_master.txt
master.txt
pages.jsp
[rb git_checkout_merge (master)]$

查看 blob 对象 ,8f0e29f 这个hash 来自前面的git show –format=%T master^2

1
2
3
[rb git_checkout_merge (master)]$ git show 8f0e29f
this is a jsp file
initial on m_t2

git log

查看历史提交。

参数

  • -–stat 统计信息
    1
    $ git log --oneline --decorate --graph --all

git diff

参数

  • –-color-words 彩色的单词差异
  • -–word-diff 标记单词差异

当前工作区与暂存区差异

1
$ git diff

暂存区与历史提交差异

1
$ git diff --cached

工作区与某个历史提交的差异,HEAD~2表示当前提交的上2个提交

1
$ git diff HEAD~2 -- master.txt

暂存区与某个历史提交的差异

1
$ git diff --cached HEAD~5 -- master.txt

2个commit之间的差异

1
$ git diff HEAD~2 HEAD~3