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
对于缩写的路径名和已更改文件的diffstat:
git log --stat
还有更多选项,请查看文档.
注意:已弃用,请改用 git whatchanged
git log
鼓励新用户改用 git-log [1].该
whatchanged
命令与git-log [1]基本相同, 但默认显示原始格式diff输出并跳过合并.该命令主要是出于历史原因; 很久以前
git log
通过阅读Linux内核邮件列表发明了很多人学习Git的手指都经过培训才能打字.
您可以使用该命令git whatchanged --stat
获取每次提交中更改的文件列表(以及提交消息).
https://git-scm.com/docs/git-whatchanged
git show
也是一个伟大的命令.
它有点像svn diff
,但你可以传递一个提交guid并看到差异.
如果您只想获取文件名而不使用其余的提交消息,则可以使用:
git log --name-only --pretty=format:
然后可以将其扩展为使用包含文件名的各种选项:
git log --name-status --pretty=format:git log --stat --pretty=format:
使用此方法时需要注意的一点是输出中有一些空白行必须被忽略.如果您希望查看已在本地分支上更改但尚未推送到远程分支的文件并且无法保证已从中拉入最新的远程文件,则使用此选项非常有用.例如:
git log --name-only --pretty=format: my_local_branch --not origin/master
将显示已在本地分支上更改但尚未合并到远程主分支的所有文件.
我每天都使用它来显示更改过的文件的历史记录:
git log --stat --pretty=short --graph
为了简短起见,请在您.gitconfig
的操作中添加一个别名:
git config --global alias.ls 'log --stat --pretty=short --graph'
我用这个:
git log --name-status.. | grep -E '^[A-Z]\b' | sort | uniq
它仅输出文件列表及其状态(添加,修改,删除):
A sites/api/branding/__init__.py M sites/api/branding/wtv/mod.py ...
git diff --stat HEAD^!
显示最后一次commit(HEAD
)的已更改文件和添加/删除的行计数.
在我看来,没有一个命令可以获得简洁的输出,只包含文件名,并且一次添加和删除几次提交的行数,所以我为此创建了自己的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
从获得一个简洁的形式的变化HEAD
来HEAD~99
.可以用管道输送.到less
.