SVN的日志具备“ -v”模式,该模式输出每次提交中更改的文件的文件名,以下所示: git
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中每次提交中已更改文件的列表? api
注意: git whatchanged
已被弃用,请改用git log
bash
鼓励新用户改用git-log [1] 。
whatchanged
命令本质上与git-log [1]相同,可是默认状况下显示原始格式diff输出并跳过合并。 less该命令的保留主要是出于历史缘由; 在经过阅读Linux内核邮件列表发明
git log
以前好久就学过Git的许多人的手指都受过训练来键入它。 svn
您可使用命令git whatchanged --stat
来获取每次提交(以及提交消息)中已更改的文件的列表。 es5
对于已更改文件的完整路径名: spa
git log --name-only
有关更改文件的完整路径名和状态: 日志
git log --name-status
对于缩写的路径名和已更改文件的diffstat: code
git log --stat
还有更多选择, 请查阅docs 。 orm
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
。 能够用管道输送。 less
。
若是只想获取文件名而不提交其他的提交消息,则可使用:
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 --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq
仅输出文件及其状态(添加,修改,删除)的列表:
A sites/api/branding/__init__.py M sites/api/branding/wtv/mod.py ...