如何只用“ git log”显示更改后的文件名

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

143018 次浏览

这几乎满足了你的需求:

git log --stat --oneline

提交 ID 和一行短代码仍然保留,后面跟着该提交更改的文件列表。

我想你可以使用 --name-only标志,比如:

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

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

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

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

我吸毒

git log --name-only

或者

git log --name-only --oneline

简称。

如果你需要 只是文件名,比如:

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

(我使用它作为 沥青命令的源代码) ,您还需要过滤掉提交消息。

为此,我使用以下命令:

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

我无意中在这里寻找一个类似的答案,没有“ git 日志”的限制。这里的答案并没有给我我需要的东西,但是这里的答案给了我所需要的东西,所以我要加上它,以防其他人发现它有用:

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 '^[A-Z]\b' | sort -k 2,2 -u

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

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

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