10.进阶 6:看看我都改了什么
进阶 6:看看我都改了什么
之前的章节里,说到过 git log
可以查看历史记录:
git log
事实上,如果你希望看到更多细节,比如你想看看每条 commit
具体都有那些改动,也是可以的。
log -p 查看详细历史
-p
是 --patch
的缩写,通过 -p
参数,你可以看到具体每个 commit
的改动细节:
git log -p
log -p
可以看到每一个 commit
的每一行改动,所以很适合用于代码 review。
log —stat 查看简要统计
如果你只想大致看一下改动内容,但并不想深入每一行的细节(例如你想回顾一下自己是在哪个 commit
中修改了 games.txt
文件),那么可以把选项换成 --stat
。
git log --stat
show 查看具体的 commit
如果你想看某个具体的 commit
的改动内容,可以用 show
:
看当前 commit
直接输入:
git show
看任意一个 commit
在 show
后面加上这个 commit
的引用(branch
或 HEAD
标记)或它的 SHA-1
码:
git show 5e68b0d8
看指定 commit 中的指定文件
在 commit
的引用或 SHA-1
后输入文件名:
git show 5e68b0d8 shopping\ list.txt
看未提交的内容
如果你想看未提交的内容,可以用 diff
。
比对暂存区和上一条提交
使用 git diff --staged
可以显示暂存区和上一条提交之间的不同。换句话说,这条指令可以让你看到「如果你立即输入 git commit
,你将会提交什么」:
git diff --staged
--staged
有一个等价的选项叫做 --cached
。这里所谓的「等价」,是真真正正的等价,它们的意思完全相同。
比对工作目录和暂存区
使用 git diff
(不加选项参数)可以显示工作目录和暂存区之间的不同。换句话说,这条指令可以让你看到「如果你现在把所有文件都 add
,你会向暂存区中增加哪些内容」:
git diff
比对工作目录和上一条提交
使用 git diff HEAD
可以显示工作目录和上一条提交之间的不同,它是上面这二者的内容相加。换句话说,这条指令可以让你看到「如果你现在把所有文件都 add
然后 git commit
,你将会提交什么」(不过需要注意,没有被 Git 记录在案的文件(即从来没有被 add 过 的文件,untracked files 并不会显示出来。为什么?因为对 Git 来说它并不存在啊)。
git diff HEAD
实质上,如果你把 HEAD
换成别的 commit
,也可以显示当前工作目录和这条 commit
的区别。不过这种「如果」是可以列举很多很多的,Git 非常灵活,假如我把每个命令的所有可能性都列举出来,这本小册会变得杂乱无比没有重点,反而会让你困惑。所以我只讲最常用和最通用的内容,如果你对这些「如果」感兴趣,最好是自己去探索。
小结
这一节介绍了一些查看改动内容的方法,大致有这么几类:
- 查看历史中的多个
commit
:log
- 查看详细改动:
git log -p
- 查看大致改动:
git log --stat
- 查看详细改动:
- 查看具体某个
commit
:show
- 要看最新
commit
,直接输入git show
;要看指定commit
,输入git show commit的引用或SHA-1
- 如果还要指定文件,在
git show
的最后加上文件名
- 要看最新
- 查看未提交的内容:
diff
- 查看暂存区和上一条
commit
的区别:git diff --staged
(或--cached
) - 查看工作目录和暂存区的区别:
git diff
不加选项参数 - 查看工作目录和上一条
commit
的区别:git diff HEAD
- 查看暂存区和上一条