使用git log,有没有办法在一个命令中获得'--name-status'和'--numstat'?

时间:2013-03-20 10:42:25

标签: git git-log

对于提交的所有文件,我希望状态修饰符--name-status提供,以及--numstat给出的添加和删除行的数量。说我有以下内容:

> git log --pretty=format:"%aN %ct" --reverse --name-status --encoding=UTF-8 --no-renames
John Doe 1234567489
M       foo/bar/foo.bar
A       bar/hello.txt

> git log --pretty=format: --reverse --numstat --encoding=UTF-8 --no-renames
9      5       foo/bar/foo.bar
21     0       bar/hello.txt

是否有单个命令/标志组合可以将它们的输出组合在一起?有点像这样:

John Doe 1234567489
M    9    5       foo/bar/foo.bar
A    21   0       bar/hello.txt

我知道可以将它们与一些awk魔法结合起来,但是看到我将在多个大型存储库和性能问题上执行此操作,最好使用单个git log命令。

1 个答案:

答案 0 :(得分:1)

由于--name-status似乎覆盖任何其他标志(它类似于--name-only),因此可以使用--summary和--numstats的组合。但是,它不会与您描述的相同。

git log --pretty=format:"%aN %ct" --reverse --summary --numstat --encoding=UTF-8 --no-renames

会产生类似的东西:

Christopher Corley 1363309327
4929    0       IEEEtran.cls
22      46      paper.tex
 create mode 100644 IEEEtran.cls

请注意,这仅列出了模式更改的摘要。对于没有模式更改的修改文件(即“M”),它们不会出现在摘要列表中。

同样,你可能会发现使用--raw而不是--summary列出修改后的文件是有益的:

Christopher Corley 1363309327
:000000 100644 0000000... 5e2d183... A  IEEEtran.cls
:100644 100644 2abed5a... 91f133d... M  paper.tex
4929    0       IEEEtran.cls
22      46      paper.tex