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 diff -stat HEAD^!显示上次提交(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的更改。例如,它可以通过管道传输到更少的地方。
如果你想只获取文件名,而不包含提交消息的其余部分,你可以使用:
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
将显示本地分支上已更改的所有文件,但尚未合并到远程上的主分支。