Reputation: 6366
I would like to get a list of only the staged filenames. I can't find the equivalent flag for --name-only
for the git status
command. What is a good alternative?
The file list will be piped to php -l
(PHP lint syntax checker).
Solution: the complete command
git diff --name-only --cached | xargs -l php -l
Upvotes: 109
Views: 51380
Reputation: 76
You can use the git command
$ git diff --name-only --staged
This command will list you the name of files that has been staged only
Upvotes: 0
Reputation: 2106
to view staged files with code changes
git diff --staged
or using --cached
which is synonym for --staged
git diff --cached
or to view only file names without code changes
git diff --staged --name-only
Upvotes: 5
Reputation: 9718
Inspired by @coffman21's answer I have setup the following alias in my .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 '^??'"
or
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 '^??'"
It might be of use to anyone else. So adding it to the stack of answers.
Upvotes: 9
Reputation: 405
from @velocity
git diff --staged
is exactly what I wanted. If anyone is looking to make this into a shortcut like git ds
in your bashrc please see this example:
git() {
if [[ $@ == "ds" ]]; then
command git diff --staged
else
command git "$@"
fi
}
Upvotes: 0
Reputation: 4292
git status --porcelain --untracked-files=all | grep '^[A|M|D|R]'
--porcelain
for parsing-friendly output--untracked-files=all
show all "untracked" files. Shows the files that are staged for commit.grep '^[A|M|D|R]'
filter the output for files that are
^
Match from the start of a newline. The first character of a line indicates the status in the staging area, the second in the working tree.A
addedM
modifiedD
deletedR
renamedThis was based on this comment
Upvotes: 2
Reputation: 1062
The accepted answer won't let you know what kind of changes were there.
Yes, If you are not syntax checker but an ordinary person with a repository full of unstaged files, and you still want to know what will happen to staged files - there is another command:
git status --short | grep '^[MARCD]'
which leads to something like:
M dir/modified_file
A dir/new_file
R dir/renamed -> dir/renamed_to
C dir/copied_file
D dir/deleted_file
Obviously, this files were staged, and after git commit
:
deleted_file
will be deleted,
new_file
will be added,
renamed_file
will become a renamed_to
.
Here is an explanation of short-format output: https://git-scm.com/docs/git-status#_short_format
Upvotes: 28
Reputation: 93900
Use git diff --name-only
(with --cached
to get the staged files)
Upvotes: 163