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

时间:2013-01-08 02:40:30

标签: git

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

6 个答案:

答案 0 :(得分:141)

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

git log --name-only 

git log --name-only --oneline

简称。

答案 1 :(得分:38)

我想你可以使用--name-only标志。类似的东西:

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

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

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

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

答案 2 :(得分:24)

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

git log --stat --oneline

提交ID +短一行仍然存在,然后是该提交的已更改文件列表。

答案 3 :(得分:19)

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

git diff --name-only

您还可以将其与标准提交指针结合使用,以查看自特定提交以来发生了哪些更改:

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

这简洁地提供了文件名 only ,非常适合编写脚本。例如:

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

答案 4 :(得分:10)

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

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,)排序。

答案 5 :(得分:6)

如果您需要文件名,请执行以下操作:

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

(我用作 tar 命令的源代码)您还需要过滤掉提交消息。

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

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

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

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

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