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 --pretty=oneline --graph --name-status

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 --oneline

——名义

只显示已更改文件的名称。文件名通常用 utf - 8。有关编码的详细信息,请参见 Git-log1手册页。

——oneline

这是“——pretty=oneline -abbrev-commit”一起使用的缩写。

输出

我用这个:

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
...

我每天都用它来显示文件更改的历史:

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

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

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