155

是否只能显示更改的文件名git log

4

6 回答 6

237

我用

git log --name-only 

或者

git log --name-only --oneline

简而言之。

于 2013-01-09T02:40:28.247 回答
78

我想你可以使用--name-only国旗。就像是:

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

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

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

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

于 2013-01-08T21:14:20.193 回答
40

我在这里偶然发现了一个没有“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
于 2014-09-08T23:45:29.370 回答
34

这几乎可以满足您的需求:

git log --stat --oneline

提交 ID 和一小行仍然保留,然后是该提交更改的文件列表。

于 2013-01-08T04:19:31.823 回答
22

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

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

以前,我曾经依靠这个:

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

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

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

-k2,2排序选项使其按文件路径而不是更改类型(A、M、D)排序。

于 2016-04-07T08:01:38.797 回答
9

如果您需要文件名,例如:

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

(我将其用作tar命令的来源),您还需要过滤掉提交消息。

为此,我使用以下命令:

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

grep命令排除(-v参数)以七个符号(这是命令的 Git 哈希的长度)开头的每一行,后跟git log空格。所以它会过滤掉所有 Githash message行,只留下带有文件名的行。

一项有用的改进是追加uniq以删除重复的行,因此它将如下所示:

git log --name-only --oneline | grep -v '.{7} ' | uniq
于 2014-06-04T10:35:07.140 回答