我想获取仅包含暂存文件名的列表。我找不到
--name-only
命令的 git status
的等效标志。有什么好的选择吗?
文件列表将通过管道传输到
php -l
(PHP lint 语法检查器)。
解决方案:完整命令
git diff --name-only --cached | xargs -l php -l
使用
git diff --name-only
(与 --cached
一起获取暂存文件)
接受的答案不会让您知道有什么样的变化。
是的,如果您不是语法检查者,而是一个拥有充满未暂存文件的存储库的普通人,并且您仍然想知道暂存文件会发生什么 - 还有另一个命令:
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
受到@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 '^??'"
它可能对其他人有用。因此将其添加到答案堆栈中。
查看包含代码更改的暂存文件
git diff --staged
或使用
--cached
,它是 --staged
的同义词
git diff --cached
或仅查看文件名而不更改代码
git diff --staged --name-only
要查看哪些文件已暂存,
git ls-files
git status --porcelain --untracked-files=all | grep '^[A|M|D|R]'
--porcelain
用于解析友好的输出--untracked-files=all
显示所有“未跟踪”文件。显示暂存以供提交的文件。grep '^[A|M|D|R]'
过滤输出中的文件
^
从换行符开始匹配。一行的第一个字符表示暂存区域中的状态,第二个字符表示工作树中的状态。A
已添加M
已修改D
已删除R
已更名这是基于此评论
来自@velocity
git diff --staged
正是我想要的。如果有人希望将其变成 bashrc 中的 git ds
之类的快捷方式,请参阅此示例:
git() {
if [[ $@ == "ds" ]]; then
command git diff --staged
else
command git "$@"
fi
}
可以使用git命令
$ git diff --name-only --staged
此命令将列出仅已暂存的文件的名称