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