能否仅使用 `git status` 命令查看已修改的文件?

224

我有太多暂存文件,是否有可能使git status仅显示由此导致的修改文件?


1
你如何设置滚动限制?默认情况下,git status会调用分页器。 - Lily Ballard
抱歉,我的机器上滚动回溯限制设置为512行。我想我可以更改它;但是,因为GD/imagecache最终会生成更多文件,所以我更喜欢一行命令来查看状态中的修改文件。 - chrisjlee
1
我的意思是分页器不使用您终端的滚动缓冲区。 - Lily Ballard
仅通过grep查找感兴趣的内容有什么问题吗?使用--short--porcelain获取状态的单行版本。 - torek
2
还有一点,基于使用 git ls-files -m 的建议:你关心哪些修改,暂存的、未暂存的还是两者都包括? - torek
18个回答

344

使用 git status 无法完成此操作,但您可以使用 git ls-files -m 显示所有已修改的文件。


7
只是让其他人知道,这只会显示已修改但尚未暂存的文件。 - Gerry
22
尽管这是被接受的答案,但其中包含了不准确的信息。如同 user23186 在他们的回答中指出的那样,你可以使用 git status | grep modified 命令只查看修改过的文件。 - K. Alan Bates
11
对我来说,git ls-files -m 没有显示任何东西,但 git status | grep modified 能够正常工作。 - Sandeepan Nath
2
正如其他人所指出的那样,这只显示未暂存的文件。如果您想同时显示未暂存和已暂存的文件,则以下是我看到的最佳答案:https://dev59.com/lVkS5IYBdhLWcg3wV1dy#39994894 - thdoan
2
@thdoan 有许多选项可以显示暂存的文件,尽管这个特定的问题似乎想要明确地排除暂存的文件。git diff --name-only --diff-filter=M HEAD将只显示已修改的文件,包括暂存和未暂存的文件,但你应该查看--diff-filter文档,以了解其他可能需要添加的过滤器类型。 - Lily Ballard
显示剩余4条评论

78

看起来 git status -uno 只会显示 git 正在跟踪的文件,而不会显示目录中的其他内容。虽然不完全符合你的要求,但也许达到了相同的目的(获取 git 跟踪的文件的易读列表)。


1
git status -u no 不会显示 (1) 已修改的跟踪文件,也不会显示 (2) 已暂存的跟踪文件。我已经在 git 版本 1.8.5.2 和 1.9.4 中验证了这一点。 - mxxk
6
@TomNysetvold,你可能实际指的是 git status -uno (https://dev59.com/71rUa4cB1Zd3GeqPgxw0) - mxxk

38

对于修改的文件:

git status | grep modified:

1
非常有用,我已经为此创建了一个别名:git config --global alias.modified'!git status | grep modified:' - Richard Parnaby-King
最好使用git status -uno。如果您更喜欢简洁的输出,则可以使用git status -s -uno或者git status -suno。注意:在-u选项和其参数no之间不要使用空格,这非常重要。 - Mr. Lance E Sloan

35
git status -s | awk '{if ($1 == "M") print $2}'

3
或者 awk '$1 == "M" { print $2 }' 的意思是在执行 awk 命令时,只输出以 M 开头的行的第二个单词。 - Calpau

25

git diff --name-only --diff-filter=M


4
我推荐使用这些筛选器:git diff --cached --name-only --diff-filter=ACMR,这会显示已添加(Added)、已复制(Copied)、已修改(Modified)和已重命名(Renamed)的文件。 - qwertzguy

11

git diff --name-only 也能起到相同的作用。


7
您可以使用

标签


$ git status -uno 

仅列出已修改的文件。

6

我正在寻找同样的信息,发现以下内容提供了修改后的文件:

git status -uno

5
git status -uno --porcelain 为解析脚本添加了不错的输出. - pprzemek

6

要列出修改过的文件,请使用:

git ls-files -m

如果您只想获取文件名(不包括路径),那么您可以使用xargs将每个结果逐行传输到basename命令:

git ls-files -m | xargs -L 1 basename

巧妙使用xargs来放弃路径。这具有远远超出此特定用例的应用程序。非常感谢! - NerdyDeeds

4
问题是我有太多暂存文件,目前不想提交或gitignore,并且我无法向上滚动。
虽然这可能不能直接回答仅列出修改的文件的问题,但可以帮助限制列出的文件数。
您可以将路径传递给git status,以将输出限制为存储库中特定文件夹。
例如:
git status app
git status spec
git status src/components

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接