Git状态-有没有办法只显示特定目录中的更改?


136

如图所示,我希望看到自上一次提交以来已修改的文件列表git status,但我只关心位于单个目录中的文件。有没有办法做到这一点?我尝试了git status <directory>,但是似乎这样做完全不同(列出所有更改的文件,就像我git add <directory>首先写的那样)。

除了接受与git-commit相同的选项这一事实外,git-status的文档并没有提供太多信息(但是git-commit的目的不是显示已更改文件的列表)。

Answers:


199

从目录内:

git status .

您实际上可以使用任何路径,请使用以下语法:

git status <directoryPath>

例如,路径为“ my / cool / path / here”的目录

git status my/cool/path/here

3
谢谢!另外,'git status <directory>'似乎正在按我的预期进行-老实说,我之前不记得自己遇到了什么问题...也许是因为其他git版本不一样。
库巴·苏德

没问题,而且可能-git的较新版本确实使事情变得更容易。
Sam Doidge

3
是的,行为肯定从1.6更改为1.7。它满足1.7中的OP要求,但1.6在整个回购中继续存在。
colgur

31

之所以git status使用相同的选项,git commit是因为目的git status是显示如果您使用与传递给的相同的选项会发生什么git status。在这方面git status确实是git commit --preview

要获得所需的内容,可以执行此操作以显示分阶段的更改:

git diff --stat --cached -- <directory_of_interest>

这显示了未分阶段的更改:

git diff --stat -- <directory_of_interest>

或同时显示以下两者的内容:

git diff --stat HEAD -- <directory_of_interest>

2
这部分起作用,尽管它不像git-status一样显示新创建的(未跟踪的)文件...
Kuba Suder

好的,我不确定您需要什么报告。如果您需要检查未暂存的文件,请尝试git ls-files --others <directory_in_question>ls-files -o
CB Bailey

git ls-files -o递归地显示未暂存目录中的文件,而git status仅显示顶层目录。而且,如果要替代,则必须撰写git diffgit ls-files输出和重新创建所有提供的颜色编码等。我也很想看看解决方案!git statusgit status
Peter V.Mørch

14

最简单的解决方案:

  1. 转到目录
  2. git status | grep -v '\.\.\/'

当然,这会丢弃颜色。


如有必要,可以添加一些修改以使颜色变回原样。例1 例2
卡森

2

需要注意的是,如果您简化了检查git stats的操作,而无需转到git目录;

###创建文件
须藤nano / usr / local / bin / gitstat

###放进去

#!/ usr / bin / env bash

dir = $ 1

如果[[$ dir ==“”]]; 然后
    回声“目录是必需的!”
    出口
科幻

echo“'$ dir'的Git统计信息。”

git --git-dir = $ dir / .git-工作树= $ dir diff --stat

###给exec烫发
须藤chmod + x / usr / local / bin / gitstat

并调用该简单脚本:gitstat /path/to/foo-project。您也可以在foo-project刚使用时使用它gitstat .,因此假设它比短git status -sgit diff --stat或者git diff --stat HEAD如果您始终使用控制台而不是gui。

学分:

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.