git-diff命令

命令格式

1
2
3
4
5
6
7
8
git diff [<options>] [--] [<path>..]           # 默认表示比较工作区与暂存区
git diff [<options>] HEAD [--] [<path>..] # 表示比较工作区与本地版本库最新版本
git diff [<options>] commitid [--] [<path>..] # 表示比较工作区与指定commit id版本

git diff [<options>] --cached [--] [<path>..] # 表示比较暂存区与本地库最新版本
git diff [<options>] --cached commitid [--] [<path>..] # 表示比较暂存区与指定commit id版本

git diff [<options>] commitid commitid [--] [<path>..] # 表示比较两次commitid之间的差异

命令参数选项

  • –raw: 显示原始的差异格式,如下:

    1
    2
    3
    [root@localhost gitTest]# git diff --cached --raw
    :000000 100644 0000000 31d115c A addfile
    :100644 100644 389cecf 1f09c93 M newfile2
  • –stat: 显示差异统计结果,如下:

    1
    2
    3
    4
    [root@localhost gitTest]# git diff --cached --stat
    addfile | 5 +++++
    newfile2 | 3 +--
    2 files changed, 6 insertions(+), 2 deletions(-)
  • –shortstat: 只显示--stat的最后一行内容

    1
    2
    [root@localhost gitTest]# git diff --cached --shortstat
    2 files changed, 6 insertions(+), 2 deletions(-)
  • –numstat: 只显示增加和删除的行数统计

    1
    2
    3
    [root@localhost gitTest]# git diff --cached --numstat
    5 0 addfile
    1 2 newfile2
  • –name-only: 只显示哪些文件有差异

    1
    2
    3
    [root@localhost gitTest]# git diff --cached --name-only
    addfile
    newfile2

使用git diff打补丁

将工作区与本地仓库的差异做成补丁
git diff > patch_name

检验补丁是否能使用,如果没有任何输出表示可以顺利接受该补丁
git apply –check patch_name

在另外一个地方应用补丁
git apply patch_name

命令回显说明

git diff命令的回显采用的时GNU diff命令合并格式的变体

linux下通过diff -u file_a file_b来显示diff合并格式

内容增删

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
> git diff HEAD~1 HEAD

diff --git a/README.md b/README.md # 表示显示内容为git格式的diff
index ae50fdb..54e2aab 100644 # ae50fab..54e2aab表示两个版本对象的哈希值
# 100644表示对象的模式(普通文件, 644权限)
--- a/README.md # --- 表示变动前的版本
+++ b/README.md # +++ 表示变动后的版本
@@ -5,6 +5,7 @@ # 该行表示变动的位置,由两个@表示开头和结尾
# - 表示 文件a/README.md, + 表示文件b/README.md
# 5,6 表示下方显示内容为a/README.md的第5行开始,连续6行
# 5,7 表示下方显示内容为b/README.md的第5行开始,连续7行
b
c
d
+new line
e
f
g
diff --git a/newfile b/newfile
index fd54aa0..2d3a259 100644
--- a/newfile
+++ b/newfile
@@ -1,5 +1,7 @@
add new file
1
-2
-3
+
+ds
+honda
+toyta

新增文件

1
2
3
4
5
6
7
8
9
10
11
diff --git a/newfile3 b/newfile3
new file mode 100644
index 0000000..d4afdcc
--- /dev/null
+++ b/newfile3
@@ -0,0 +1,5 @@
+add new file3
+
+new file
+
+new file end

删除文件

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/newfile b/newfile
deleted file mode 100644
index 2d3a259..0000000
--- a/newfile
+++ /dev/null
@@ -1,7 +0,0 @@
-add new file
-1
-
-ds
-honda
-toyta
-

重命名文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
diff --git a/deletefile b/newfile2
similarity index 89%
rename from deletefile
rename to newfile2
index 08cb754..389cecf 100644
--- a/deletefile
+++ b/newfile2
@@ -1,8 +1,6 @@
file tobe rename
1
2
-3
-4
5
6
7