Ward Bekker
Ward Bekker

Reputation: 6366

How to make git status show only staged files

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

Answers (8)

Yassine Maghfour
Yassine Maghfour

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

velocity
velocity

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  

git-diff manual

Upvotes: 5

Norfeldt
Norfeldt

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

Celsian
Celsian

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

CervEd
CervEd

Reputation: 4292

Show only staged files

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 added
    • M modified
    • D deleted
    • R renamed

This was based on this comment

Upvotes: 2

Babai
Babai

Reputation: 97

To view which files are staged ,

git ls-files

Upvotes: 2

coffman21
coffman21

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

Ben Jackson
Ben Jackson

Reputation: 93900

Use git diff --name-only (with --cached to get the staged files)

Upvotes: 163

Related Questions