用生命谱写代码的赞歌

0%

git diff 详解

git diff 命令

git diff 命令是用来比较显示 git 各版本之间文件不同的命令。

git diff (不带参数)

git diff 比较显示暂存区 (staging area) 与工作区 (working area) 文件的不同

git diff master

比较显示 master 分支与工作区文件的不同

git diff HEAD

比较显示 HEAD 指向的内容与工作区文件的不同

git diff refs/remotes/origin/master

比较显示 master 分支与当前工作区文件的不同

比较 master 分支的历史提交版本与工作区

git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c ./header.html

上面的命令中, diff 后面的参数指的是 commit id./header.html 是要比较的文件路径。

git diff 命令输出格式

  1. --- 代表源文件
  2. +++ 代表目标文件

通常工作区的文件都被当作目标文件看待。

  • - 开头的行,是只出现在源文件中的行
  • + 开头的行,是只出现在目标文件中的行
  • 空格开头的行,是源文件和目标文件中都出现的行
  • 差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git diff
diff --git a/webpack.production.js b/webpack.production.js
index eb5e967..ffba89b 100644
--- a/webpack.production.js
+++ b/webpack.production.js
@@ -85,7 +85,7 @@ module.exports = {
},
plugins: [
// webpack 内置的 banner-plugin
- new webpack.BannerPlugin("Copyright by 2015-2016."),
+ new webpack.BannerPlugin("Copyright by hushiking@github.com."),

// html 模板插件
new HtmlWebpackPlugin({

上面的 git diff 结果说明:

  1. 文件之前的某个提交是源文件,当前工作区的该文件是目标文件
  2. 在源文件第85行开始的7行和目标文件第85行开始的7行构成一个差异小结
  3. 这个差异小结中,目标文件添加了一行 new webpack.BannerPlugin("Copyright by hushiking@github.com."),
  4. 其他空格开头的行表明没有差异