如何仅使用“git log”显示更改的文件名[重复]

Posted

技术标签:

【中文标题】如何仅使用“git log”显示更改的文件名[重复]【英文标题】:How to show changed file name only with 'git log' [duplicate] 【发布时间】:2012-12-21 20:36:59 【问题描述】:

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

【问题讨论】:

有些相关:Bash function to find all Git commits in which a file (whose name matches a regex) has changed 【参考方案1】:

我用

git log --name-only 

git log --name-only --oneline

简称。

【讨论】:

--name-only 参数即使使用git show 命令也可以工作。【参考方案2】:

我猜你可以使用--name-only 标志。比如:

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

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

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

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

【讨论】:

这个解决方案非常好,只有没有作者、日期或提交消息信息的文件列表 这几乎正是我想要的——但它确实包含了我的提交消息——因为我想通过管道输出,这不是最佳的。【参考方案3】:

我在这里偶然发现了一个没有“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

【讨论】:

也适用于git log --name-only【参考方案4】:

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

git log --stat --oneline

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

【讨论】:

【参考方案5】:

现在我使用以下内容获取当前分支的已更改文件列表,并将其与 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)排序。

【讨论】:

这实际上是唯一真正为“仅文件名”问题提供答案的答案。 短添加:此命令还将显示已添加并随后在同一分支中重命名或删除。这些文件可能不再存在。【参考方案6】:

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

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

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

为此,我使用以下命令:

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

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

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

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

【讨论】:

在 OSX bash shell 中,必须在括号前加上反斜杠。我还添加了行开始匹配和空间匹配器。 "git show --name-only --oneline | grep -v '^.\7\\s'"

以上是关于如何仅使用“git log”显示更改的文件名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 git log 显示合并期间更改的文件

如何使用 git log 仅获取带有路径的文件名?

显示在 git log 中编辑的文件 [重复]

git log 仅显示一个提交 ID

git log

为啥 git log 可能不显示移动文件的历史记录,我该怎么办?