是否只能使用git log
显示更改的文件名?
答案 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