如果你做了一个简单的改动,然后马上提交了它,你并不需要Git来告诉你你做了什么。你可能在你的脑子里记录了它。但有许多时候,你需要检验内容发生了怎样的变化。有三种主要的方法,来做到这个,都是使用同一个命令:Diff。
看着Diff它最伟大的事,是他帮助巩固我们学到的暂存区域,当我们学习怎样提交的时候。
现在,假设你改动了一个文件然后被从电脑前叫出去了一小会儿然后回来,你是怎样记起你做了什么的?
用不同的方式,你想要知道你对没存档的文件做了哪些改动。这对你用的开发工具而言同样困难。这些工具自动为你改动了代码。然而你想要找出哪些被改动了。只需输入git diff 然后你就会得到你的工作树的精确描述,也就是,仅仅是你的文件,而不同于你的暂存区域
$ ls -l
$ git diff
现在,假设你已经存档了哪些文件而且你想要知道你对暂存区域文件和最近提交的历史文件有什么区别。只需要输入git diff--staged,然后你就能看到这些改动。
$git diff --staged
作为一个小小的意外收获,通过这段练习,能帮助你巩固对暂存区域的理解。
仅因为你暂存了一个文件并不意味着你不能再次修改它。
$vi index.html
如果你继续对同一文件进行修改,状态命令将会告诉你文件已暂存,并且已经未缓存修改
$git status
同时,如果你已经做了这个,你可能需要diff命令来跳过正在暂存的区域,并告诉你在最后一次提交之后你所做的所有修改。输入git diff HEAD
$git diff HEAD
将你的工作树和头一次提交相比较
这只是在提交历史中最近一次提交的另一个别名
一旦你开始学会怎样使用分支,推,拉,这最后一个模式将来得挺困难。你能使用它将两个分支彼此比较,或者将历史中两个之前的提交彼此比较,来得知过去发生了什么更改。
现在你可能注意到最后一个diff,用一种有点冗余的方式表述了。
我只更改一个单词,但是Git现在告诉我,我更改了整行。这就是git怎样处理文本文件差异的,但是它看起来并不十分有用。
你可以加上 --color-words或者--word-diff来转换到任何Diff命令
$ git diff --color-words
$ git diff --words-color
一种对长行小改动而言更易读的报告。有时,这可以是一个正确的救星。另一个简单方便了技巧是让Diff阻止输出所有的代码块,而是仅输出更改的文件。
$ git status
使用--stat 转换到这种模式。这太棒了,当你拿到一个复杂的diff但你可能只是需要锁定一个被修改过的特定文件时。
$ git diff --stat
追踪更改是Git的活儿,Diff命令是你观察你所做的成果和Git是怎样看待这些变化的窗口。这是一个伟大的命令