当前位置:  开发笔记 > 编程语言 > 正文

如何让git log显示文件名,如svn log -v

如何解决《如何让gitlog显示文件名,如svnlog-v》经验,为你挑选了7个好方法。

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> CB Bailey..:

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

git log --name-only

对于完整路径名和已更改文件的状态:

git log --name-status

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

git log --stat

还有更多选项,请查看文档.


`git log --name-only --oneline`也很漂亮 - 提交一条彩色线,每行一个文件.http://stackoverflow.com/a/14227496/1995714
我用`git log --numstat`.有关更多选项,请参阅`git help log`.
使用git 2.7.3,我不得不使用`git log --name-status --find-renames`来显示重命名的文件而不是添加+删除.

2> mipadi..:

注意:已弃用,请改用 git whatchangedgit log

鼓励新用户改用 git-log [1].该 whatchanged命令与git-log [1]基本相同, 但默认显示原始格式diff输出并跳过合并.

该命令主要是出于历史原因; 很久以前git log通过阅读Linux内核邮件列表发明了很多人学习Git的手指都经过培训才能打字.


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

参考

https://git-scm.com/docs/git-whatchanged



3> 小智..:

git show 也是一个伟大的命令.

它有点像svn diff,但你可以传递一个提交guid并看到差异.



4> Hazok..:

如果您只想获取文件名而不使用其余的提交消息,则可以使用:

git log --name-only --pretty=format: 

然后可以将其扩展为使用包含文件名的各种选项:

git log --name-status --pretty=format: 

git log --stat --pretty=format: 

使用此方法时需要注意的一点是输出中有一些空白行必须被忽略.如果您希望查看已在本地分支上更改但尚未推送到远程分支的文件并且无法保证已从中拉入最新的远程文件,则使用此选项非常有用.例如:

git log --name-only --pretty=format: my_local_branch --not origin/master

将显示已在本地分支上更改但尚未合并到远程主分支的所有文件.



5> xsor..:

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

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

为了简短起见,请在您.gitconfig的操作中添加一个别名:

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



6> Sofia..:

我用这个:

git log --name-status .. | grep -E '^[A-Z]\b' | sort | uniq

它仅输出文件列表及其状态(添加,修改,删除):

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...



7> nrz..:

git diff --stat HEAD^!显示最后一次commit(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.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有