如何让git log显示像svn log -v这样的文件名

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


#1楼

注意: git whatchanged已被弃用,请改用git log bash

鼓励新用户改用git-log [1]whatchanged命令本质上与git-log [1]相同,可是默认状况下显示原始格式diff输出并跳过合并。 less

该命令的保留主要是出于历史缘由; 在经过阅读Linux内核邮件列表发明git log以前好久就学过Git的许多人的手指都受过训练来键入它。 svn


您可使用命令git whatchanged --stat来获取每次提交(以及提交消息)中已更改的文件的列表。 es5

参考文献


#2楼

对于已更改文件的完整路径名: spa

git log --name-only

有关更改文件的完整路径名和状态: 日志

git log --name-status

对于缩写的路径名和已更改文件的diffstat: code

git log --stat

还有更多选择, 请查阅docsorm


#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得到以简洁的形式从变化HEADHEAD~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
...
相关文章
相关标签/搜索