如何让 git log 显示像 svn log -v 这样的文件名

SVN 的日志具有 “-v” 模式,该模式输出每次提交中更改的文件的文件名,如下所示:

jes5199$ svn log -v
------------------------------------------------------------------------
r1 |   jes5199 | 2007-01-03 14:39:41 -0800 (Wed, 03 Jan 2007) | 1 line
Changed paths:
   A /AUTHORS
   A /COPYING
   A /ChangeLog
   A /EVOLUTION
   A /INSTALL
   A /MacOSX

有没有一种快速的方法来获取 git 中每次提交中已更改文件的列表?

答案

git log --name-only
git log --name-status
git log --stat

注意: 不推荐使用git log git whatchanged ,请改用git log

建议新用户改用git-log [1]whatchanged命令本质上与git-log [1]相同,但是默认情况下显示原始格式 diff 输出并跳过合并。

该命令的保留主要是出于历史原因;在通过阅读 Linux 内核邮件列表发明git log之前很久就学会了 Git 的许多人的手指都受过训练来打字。


您可以使用命令git whatchanged --stat来获取每次提交(以及提交消息)中已更改的文件的列表。

参考文献

git show也是一个很棒的命令。

这有点像svn diff ,但是您可以将其传递给 commit guid 并查看该差异。

git log --name-only --pretty=format: <branch name>
git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>
git log --name-only --pretty=format: my_local_branch --not origin/master
git log --stat --pretty=short --graph
git config --global alias.ls 'log --stat --pretty=short --graph'
git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq
A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...
#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done
git log --pretty=oneline --graph --name-status
$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile
$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"