98

我想获得一个仅包含暂存文件名的列表。我找不到该命令的等效--name-only标志git status。什么是好的选择?

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

解决方案:完整的命令

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

7 回答 7

145

使用git diff --name-only(with--cached获取暂存文件)

于 2010-12-24T07:59:03.190 回答
21

接受的答案不会让您知道那里发生了哪些变化

是的,如果您不是语法检查员,而是一个拥有充满未暂存文件的存储库的普通人,并且您仍然想知道暂存文件会发生什么 - 还有另一个命令:

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

于 2018-06-06T13:54:31.597 回答
6

@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 '^??'"

或者

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

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

于 2020-09-09T21:02:59.963 回答
5

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

git diff --staged   

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

git diff --cached

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

git diff --staged --name-only  

git-diff 手册

于 2020-02-14T14:41:17.693 回答
3

要查看暂存的文件,

git ls-files
于 2021-02-27T07:11:43.120 回答
2

仅显示暂存文件

git status --porcelain --untracked-files=all | grep '^[A|M|D|R]'
  • --porcelain用于解析友好的输出
  • --untracked-files=all显示所有“未跟踪”的文件。显示为提交暂存的文件。
  • grep '^[A|M|D|R]'过滤文件的输出
    • ^从换行符开始匹配。一行的第一个字符表示暂存区中的状态,第二个表示工作树中的状态。
    • A添加
    • M修改的
    • D已删除
    • R重命名

这是基于此评论

于 2021-06-05T00:00:16.077 回答
0

来自@velocity
git diff --staged正是我想要的。如果有人想把它变成git ds你的 bashrc 中的快捷方式,请看这个例子:

git() {
    if [[ $@ == "ds" ]]; then
        command git diff --staged
    else
        command git "$@"
    fi
}
于 2021-11-03T21:44:03.980 回答