如何让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行
更改的path:
    A / AUTHORS
    A /复制
    A / ChangeLog
    A /演变
    A / INSTALL
    A / MacOSX

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

有关已更改文件的完整path名称:

 git log --name-only 

有关已更改文件的完整path名称和状态:

 git log --name-status 

对于缩写的path名和已更改文件的diffstat:

 git log --stat 

有更多的select, 检查文档 。

注意: git whatchanged已被弃用,请改用git log

鼓励新用户改用git-log [1] 。 whatchanged命令与git-log [1]基本相同,但默认显示原始格式diff输出并跳过合并。

这个命令主要是由于历史的原因。 很多在git log发明前通过阅读Linux内核邮件列表学习了Git的人的手指都被训练成键入它。


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

参考

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

这有点像svn diff ,但是你可以通过一个commit guid来看看这个diff。

如果你只想得到文件名,而没有其他的提交信息,你可以使用:

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

这可以扩展到使用包含文件名的各种选项:

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

使用这种方法时需要注意的一点是,输出中有一些空行会被忽略。 如果您希望查看已在本地分支上更改的文件,但尚未将其推送到远程分支,并且无法保证远程的最新文件已被拉入,则可以使用此function。例如:

 git log --name-only --pretty=format: my_local_branch --not origin/master 

将显示在本地分支上已经改变但尚未合并到远程主分支上的所有文件。

我每天都用这个来显示更改过的文件的历史logging:

 git log --stat --pretty=short --graph 

为了保持简短,在你的.gitconfig添加一个别名:

 git config --global alias.ls 'log --stat --pretty=short --graph' 

我使用这个:

 git log --name-status <branch>..<branch> | grep -E '^[AZ]\b' | sort | uniq 

它仅输出文件列表及其状态(添加,修改,删除):

 A sites/api/branding/__init__.py M sites/api/branding/wtv/mod.py ... 

git diff --stat HEAD^! 显示更改的文件并添加/删除最后一次提交( HEAD )的行数。

在我看来,没有单一的命令来获得简洁的输出,只包含文件名,并且一次添加和删除多个提交的行数,所以我创build了我自己的bash脚本:

 #!/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 

被称为例如。 ./changed_files 99以简明的forms从HEAD./changed_files 99获取更改。 可以pipe道,例如。 less