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

感情迁移 提交于 2019-12-15 19:56:39

【推荐】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获得以简洁的形式从变化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
...
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!