一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
git diff的比较功能对回忆自己文件哪里出现了改动有很大的帮助,但是git diff反馈的是纯文本格式的内容(如下图),对新手小白来说还真有点看不懂,那么我们就用一个实例来看看git diff到底都给我们呈现了什么信息吧。
先来介绍一下这个实例原本的状态:
git-初始化体验文件夹
- .git
- index.html
- reset.css
可以看到现在这个实例文件夹里一共就两个文件,一个index.html, 一个reset.css。 现在我添加一个cart.html购物车的页面,然后删除了reset.css文件里部分的内容,新增了一个index.css和一个cart.css文件。
现在看看使用git diff后反馈的结果吧。
这个输出很长,但是我们不要慌,反馈的信息非常有规律。我们一行一行读。
diff --git a/cart.html b/cart.html
先比较的是新添加的购物车页面cart.html的内容:
diff --git是默认的代码格式,后面才是重点
a/cart.html b/cart.html 表示改动前后的两个文件,用a来区别是改动前的cart.html,b来区别是改动后的cart.html
第二行:
new file mode 100644 说新文件的模式是 100644 ,这句话是用来告诉我们当前这个cart.html文件的状态,100644分两块看,100代表普通文件,644代表当前用户对文件的权限。
第三行:
index 0000000..3ac6a14 index这个单词熟悉吗,代表的就是暂存区。 里面的..表示分隔符,分隔开了0000000和3ac6a14这两个文件对象,这两串数字就是改动前后两个文件对象的git哈希值,每个文件都有一个独特的哈希值,0000000可以认为是以前没这个文件,这很合理,因为我们的cart.html文件是新建的,改动前的文件哈希值是0。
如果我们改动一个文件,那他显示的信息就会是这样的。
分隔符..前后的两个哈希值就不一样,而且前面那个就不是0000000了,因为改动的index.html这个文件不是新建的,他之前就存在,git一直记录着他的哈希值呢。
而且我们发现,这里把第二行和第三行的信息合并了,不再显示第二行的:new file mode 这句话。 这也是改动文件和新建文件这两种操作反馈出来信息的不同。
第四五行:
--- /dev/null
+++ b/cart.html
---表示改动前的文件,/dev/null是文件路径+文件名,表示改动前的这个文件不存在,因为cart.html是我们新建的。
+++表示改动后的文件,b/cart.html是改动后的文件名
第六行:
@@ -0,0 +1,13 @@
这句话给我们说了改动在哪,一句代表一处改动,一个文件里可能会改动好几处位置,改动几处就会有几句上面这个代码。两端的@@都是相同的,只有中间这几个数字来传递改动的信息。
空格前后来区别改动前后的两个文件。
前面是-0,0第一个-号表示改动前,,前的0表示从第几行开始展示,,后的数字表示显示几行。-0,0表明改动前文件没内容,新增文件都是这样。
后面是-1,13第一个+号表示改动后,,前的1表示从第1行开始展示,,后的数字13表示显示了13行。-1,13表示从第一行开始显示,显示了13行内容。
你可以数数下面显示的内容是不是这样:
接下来的一大串信息,git给我们标绿了。绿色表示新增,行前标+。红色表示,删除行前标-。白色表示没改动,行前没有标志。
我还把reset.css文件删除了.box的样式,git diff给我显示的就是这样的结果:
解读一下:
@@ -2,10 +2,3 @@
改动前的文件显示的是从第二行开始的内容,一共显示了10行内容,标红的内容全是删除的,删除了7行。
所以改动后文件从第2行显示,一共显示了三行内容,后面标红的内容都没了。