ILD

git diff
作者:Herbert Yuan 邮箱:yuanjp@hust.edu.cn
发布时间:2018-5-19 站点:Inside Linux Development

git diff,显示commit之间,commit和工作区之间等的差异。


语法

1
2
3
4
5
git diff [options] [<commit>] [<path>]
git diff [options] --cached [<commit>] [<path>]
git diff [options] [<commit>] [<commit>] [<path>]
git diff [options] <blob> <blob>
git diff [options] [no-index] <path> <path>


描述

显示工作区和索引,工作区和树,索引和树,两个树,两个blob,磁盘上的两个文件之间的改变。


git diff [<path>]

显示工作区和索引之间的差异,<path>指定只显示这些路径的差异。 


git diff --no-index [<path>...]

比较文件系统中两个路径的差异。如果至少有一个path不在git工作区之内,则可以省略--no-index


git diff --cached [<commit>] [<path>]

显示index和commit之间的差异。如果想比较最后一次commit,即HEAD,则可以省略commit。


git diff <commit> [<path>]

显示工作区和commit之间的差异。可以使用HEAD或者分支名。


git diff <commit> <commit> [<path>]

显示任意两个commit之间的差异


git diff <commit>...<commit> [<path>]

上述的同义方式,如果任何一侧的commit省略,则默认为HEAD。


git diff <commit>...<commit> [<path>]

比较两个commit的共同祖先和第二个commit之间的差异,如果任何一个被忽略,则使用HEAD。


注意:除了上述最后两种形式,<commit>可以是任何tree。


git diff <blob> <blob>

显示两个blob之间的差异。


选项

-p

-u

--patch

产生patch,默认开启。


-s

--no-patch

抑制patch输出。


-U<n>

--unified=<n>

产生n行上下文。默认3行,如下述,- +之前有4行上下文。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ git diff 3280c4c2 -U4 
diff --git a/src/openvpn/options.c b/src/openvpn/options.c
index 641a26e..49ed004 100644
--- a/src/openvpn/options.c
+++ b/src/openvpn/options.c
@@ -5232,10 +5232,12 @@ add_option(struct options *options,
         options->topology = parse_topology(p[1], msglevel);
     }
     else if (streq(p[0], "tun-ipv6") && !p[1])
     {
-        VERIFY_PERMISSION(OPT_P_UP);
-        msg(M_WARN, "Note: option tun-ipv6 is ignored because modern operating systems do not need special IPv6 tun handling anymore.");
+        if (!pull_mode)
+        {
+            msg(M_WARN, "Note: option tun-ipv6 is ignored because modern operating systems do not need special IPv6 tun handling anymore.");
+        }
     }
 #ifdef ENABLE_IPROUTE
     else if (streq(p[0], "iproute") && p[1] && !p[2])
     {


--raw

产生raw format格式输出,主要用来查看修改了哪些文件:

1
2
$ git diff 3280c4c2 --raw 
:100644 100644 641a26e... 49ed004... M  src/openvpn/options.c


--patch-with-raw

等价于-p --raw,既显示patch,又显示raw。


--stat

显示统计信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ git diff 2ddb527abe --stat
 .gitignore                      |   3 +-
 Makefile.am                     |   5 +-
 configure.ac                    |   4 +-
 doc/Makefile.am                 |   2 +
 doc/doxygen/Makefile.am         |  21 +++
 doc/doxygen/openvpn.doxyfile    | 279 ----------------------------------------
 doc/doxygen/openvpn.doxyfile.in | 279 ++++++++++++++++++++++++++++++++++++++++
 src/openvpn/buffer.c            |   8 --
 src/openvpn/buffer.h            |   9 +-
 src/openvpn/forward.c           |   2 +-
 src/openvpn/misc.c              |   4 +-
 src/openvpn/misc.h              |   2 +-
 src/openvpn/multi.c             |   7 +-
 src/openvpn/options.c           |   8 +-
 14 files changed, 329 insertions(+), 304 deletions(-)


--numstat

--shortstat

--dirstat

其他统计显示形式。


--summary

输出头信息的改变,如创建,重命名,模式改变。

1
2
3
4
$ git diff 2ddb527abe --summary
 create mode 100644 doc/doxygen/Makefile.am
 delete mode 100644 doc/doxygen/openvpn.doxyfile
 create mode 100644 doc/doxygen/openvpn.doxyfile.in


--patch-with-stat

等价于-p --stat


--name-only

只显示文件名


--name-status

显示文件名及改变状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git diff 2ddb527abe --name-status
M       .gitignore
M       Makefile.am
M       configure.ac
M       doc/Makefile.am
A       doc/doxygen/Makefile.am
D       doc/doxygen/openvpn.doxyfile
A       doc/doxygen/openvpn.doxyfile.in
M       src/openvpn/buffer.c
M       src/openvpn/buffer.h
M       src/openvpn/forward.c
M       src/openvpn/misc.c
M       src/openvpn/misc.h
M       src/openvpn/multi.c
M       src/openvpn/options.c


-B[<n>][/<m>]

--break-rewrites[=[<n>][/<m>]]

将重新的文件的差异显示为全部删除和新建。


参考:

https://git-scm.com/docs/git-diff

https://git-scm.com/docs/diff-format


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.