【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
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中每次提交中已更改文件的列表?
#1楼
注意: git whatchanged
已被弃用,请改用git log
鼓励新用户改用git-log [1] 。
whatchanged
命令本质上与git-log [1]相同,但是默认情况下显示原始格式diff输出并跳过合并。该命令的保留主要是出于历史原因; 在通过阅读Linux内核邮件列表发明
git log
之前很久就学过Git的许多人的手指都受过训练来键入它。
您可以使用命令git whatchanged --stat
来获取每次提交(以及提交消息)中已更改的文件的列表。
参考文献
#2楼
对于已更改文件的完整路径名:
git log --name-only
有关更改文件的完整路径名和状态:
git log --name-status
对于缩写的路径名和已更改文件的diffstat:
git log --stat
还有更多选择, 请查阅docs 。
#3楼
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
。
#4楼
如果只想获取文件名而不提交其余的提交消息,则可以使用:
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
将显示所有在本地分支上已更改但尚未合并到远程主分支上的文件。
#5楼
我用这个:
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
...
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3143309