是否可以仅在修改后的文件中使用git status?


173

是否有可能 git status只显示修改过的文件?

问题是我现在有太多暂存文件,我不想提交或gitignore,而且我无法向上滚动。我在Ubuntu上设置了回滚限制。


1
您如何限制滚动?默认情况下,git status将调用寻呼机。
莉莉·巴拉德

抱歉,我的计算机上的回滚限制设置为512行。我想我可以改变它。但宁愿使用一行命令来查看状态为已修改的文件,因为GD / imagecache最终会生成更多文件。
chrisjlee 2012年

1
是的...我的意思是寻呼机不使用终端的回滚。
莉莉·巴拉德

仅仅为您发现的有趣内容而做错什么了吗?使用--short--porcelain获取状态的单行版本。
torek'4

2
根据要使用的建议,还要多加一点git ls-files -m:您关心,已分阶段,未分阶段或同时关心这两个修改?
torek'4

Answers:


268

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


6
就像其他人知道的那样,这将仅显示已修改但尚未暂存的文件。
格里2015年

11
虽然这是公认的答案,但信息不正确。您可以git status | grep modified按照user23186在其答案中指示的方式“仅'git status'仅修改文件” 。
K. Alan Bates

9
对我来说,git ls-files -m什么也没显示,但是git status | grep modified正在起作用。
Sandeepan Nath

1
正如其他人指出的那样,这仅显示未暂存的文件。如果要显示未暂存和暂存的文件,这是我见过的最佳答案:stackoverflow.com/a/39994894/452587
thdoan

1
@thdoan有许多用于显示暂存文件的选项,尽管此特定问题似乎想显式排除暂存文件。git diff --name-only --diff-filter=M HEAD会只显示已登台和未登台的修改文件,尽管您应检查文档--diff-filter以查看可能要添加的其他过滤器类型。
莉莉·巴拉德

57

看起来git status -uno只向您显示git正在跟踪的文件,而未在目录中显示任何其他内容。并非完全符合您的要求,但可能完成了同一件事(获取git跟踪的文件的可读长度列表)。


1
git status -u no不会显示(1)已修改的跟踪文件,也不会显示(2)已暂存的跟踪文件。我已经使用git版本1.8.5.2和1.9.4对此进行了验证。
mxxk 2014年

2
@TomNysetvold,你实际上可能意味着git status -unostackoverflow.com/questions/7008546/...
mxxk


29

对于修改后的文件:

git status | grep modified:

1
如此有用,我为此创建了一个别名:git config --global alias.modified '!git status | grep modified:'
Richard Parnaby-King

15

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


2
我建议使用以下过滤器:git diff --cached --name-only --diff-filter=ACMR可以添加,复制,修改和重命名文件。
qwertzguy


3

我在寻找相同的信息,发现以下给出了修改后的文件:

git status -uno

2
git status -uno --porcelain为解析脚本添加了不错的输出
pprzemek '19


3

问题是我现在有太多暂存文件,我不想提交或gitignore,而且我无法向上滚动。

虽然这可能无法直接回答仅列出已修改文件的问题,但可能有助于限制列出的文件数。

您可以通过以下路径 git status将输出限制为回购中的特定文件夹。

例如:

git status app
git status spec
git status src/components

2

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

git ls-files -m

如果只需要基本名称(没有路径),则可以使用xargs逐行将每个结果通过管道传递给基本名称命令:

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

1

我使用以下命令:

$ git status -uno -sb

输出看起来像这样:

## master...origin/master
 M GNUmakefile
 M include/mp4v2/project.h

0

我用git cola。它是一个简单而优雅的UI客户端,它将向您显示修改后的文件,并为您提供所做更改的差异。

git cola为您提供了一个GUI,您可以在其中可视化修改的文件,暂存的文件,甚至不跟踪的文件。您的问题是我只相信使用git status,但我认为git cola可以在需要时提供帮助。从更多信息中查看此网页:git-cola.github.com/screenshots.html


1
鉴于我不熟悉git cola,您能否提供与我的答案有何关系。例如屏幕截图或更详细的信息?
chrisjlee

那为什么被拒绝?:)无论如何,git cola为您提供了一个GUI,您可以在其中可视化修改的文件,暂存的文件以及不跟踪的文件。您的问题是我只相信使用git status,但我认为git cola可以在需要时提供帮助。从更多信息中查看此网页:git-cola.github.com/screenshots.html
n_x_l 2012年

如何更改可乐的界面语言?
ziyuang,2014年


0

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

git show --stat --oneline HEAD

0

所有好的答案;仅FEI,“ git checkout”(切换到同一分支或在同一分支中)似乎仅显示修改后的文件。


0

操作系统:windows

以下命令将显示包含“ modified:”“ renamed:”“ new file”的所有行。

git status | findstr "modified: renamed: new file:"

如果要指定文件类型:(例如*.py *.ini

git status *.py *.ini | findstr "modified: renamed: new file:"

如果您认为输入太多太多麻烦:

  1. 创建一个批处理文件(例如:st.bat

  2. 编写内容如下:

    @echo off
    :: st.bat  (this line doesn't necessarily. ( just let you know the scripts name.))
    git status %~1 | findstr "modified: renamed: new file:"
    
  3. 添加包含您的批处理文件的环境路径。(st.bat

  4. 用法

    st.bat "*.py *.ini"
    

    (注意:如果类型> 1,则必须添加分号)

操作系统:LINUX

正如@Lance所说的,您可以尝试

git status | grep modified:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.