如何使git status只显示暂存文件


85

我只想获取暂存文件名的列表。我找不到--name-onlygit status命令的等效标志。有什么好的选择?

文件列表将通过管道传递到php -l(PHP lint语法检查器)。

解决方案:完整的命令

git diff --name-only --cached | xargs -l php -l

3
如果您正在手动运行该命令,听起来您可能希望将其放入预提交挂钩中。kernel.org/pub/software/scm/git/docs/githooks.html
MatrixFrog 2010年

Answers:



11

接受的答案不会让您知道在那里进行了哪些更改

是的,如果您不是语法检查程序,而是一个普通的人,而这个普通人的仓库中存储了未暂存的文件,并且您仍然想知道暂存的文件将发生什么情况,那么还有另一个命令:

git status --short | grep '^[MARCD]'

导致类似:

M  dir/modified_file
A  dir/new_file
R  dir/renamed -> dir/renamed_to
C  dir/copied_file
D  dir/deleted_file

显然,此文件已上演,并且在之后git commit
deleted_file将被删除,
new_file将被添加,
renamed_file将成为renamed_to

这是简短格式输出的说明:https : //git-scm.com/docs/git-status#_short_format


1.在我的版本(2.25.0.windows.1)中 “ M”和“ D”之前有一个空格。2.还有另一个状态-“ ??” 我不确定该如何解释。
itsho

@itsho空格表示未暂存。这个答案是正确的,因为它与该行的第一个字符匹配。如果设置了第一个字符,则它是暂存文件。如果是空格,它将被忽略。
Avner

1
这是天才!-类似的东西应该有一个git标志
Norfeldt

2

@ coffman21的答案启发,我在自己的计算机中设置了以下别名.zshrc

alias gst="git status"
alias gst-staged="git status --short | grep '^\w'"
alias gst-unstaged="git status  --short | grep '^\W'"
alias gst-unstaged-tracked="git status  --short | grep '^\s'"
alias gst-untracked="git status --short | grep '^??'"

它可能对其他任何人有用。因此,将其添加到答案堆栈中。


0

查看具有代码更改的暂存文件

git diff --staged   

或使用--staged的同义词--cached

git diff --cached

或仅查看文件名而不更改代码

git diff --staged --name-only  

git-diff手册

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.