如何仅用git log显示更改的文件名?

它只能用git log来显示更改的文件名吗?

感谢您的回答,@ mvp,@ xero,我根据您的答案得到我想要的结果。

 git log --name-only 

要么

 git log --name-only --oneline 

简而言之。

我想你可以用--name-only标志。 就像是:

git log 73167b96 --pretty="format:" --name-only

我个人使用git show查看提交中更改的文件

git show --pretty="format:" --name-only 73167b96

(73167b96可以是任何提交/标签名称)

这给你几乎所需:

 git log --stat --oneline 

提交id + short一行仍然存在,然后是该提交所更改文件的列表。

我在这里偶然发现了一个没有“git log”限制的类似答案。 这里的答案并没有给我我所需要的,但是这样做,我会添加它,以防其他人发现它有用:

 git diff --name-only 

你也可以将它与标准的提交指针结合起来,看看自从一个特定的提交后发生了什么变化:

 git diff --name-only HEAD~3 git diff --name-only develop git diff --name-only 5890e37..ebbf4c0 

这简洁地提供了用于脚本的文件名。 例如:

 git diff --name-only develop | while read changed_file; do echo "This changed from the develop version: $changed_file"; done #OR git diff --name-only develop | xargs tar cvf changes.tar 

现在我使用以下命令来获取当前分支已更改文件的列表,并将其与master进行比较(比较分支很容易更改):

 git log --oneline --pretty="format:" --name-only master.. | awk 'NF' | sort -u 

以前,我曾经依靠这个:

 git log --name-status <branch>..<branch> | grep -E '^[AZ]\b' | sort -k 2,2 -u 

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

 A foo/bar/xyz/foo.txt M foo/bor/bar.txt ... 

sorting的-k2,2选项使得它按文件pathsorting而不是更改types(A,M,D)。

如果你需要像下面这样的文件名:

 dir/subdir/file1.txt dir/subdir2/file2.sql dir2/subdir3/file6.php 

(我用作tar命令的源代码),您还需要筛选出提交消息。

为了做到这一点,我使用以下命令:

git log --name-only --oneline | grep -v '.{7} '

grep命令排除( -v param)每行以七个符号开头(这是git log命令的git散列长度),后跟空格。 所以它过滤掉每一个git hash message行,只留下文件名的行。

一个有用的改进是追加uniq删除重复的行,所以它会看起来如下所示:

git log --name-only --oneline | grep -v '.{7} ' | uniq