90

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
Stefan van den Akker
  • 5,714
  • 7
  • 38
  • 57
Ward Bekker
  • 5,926
  • 8
  • 35
  • 60
  • 3
    If you're running that command manually, it sounds like you might want to put it into a pre-commit hook. http://www.kernel.org/pub/software/scm/git/docs/githooks.html – MatrixFrog Dec 24 '10 at 22:55

5 Answers5

138

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

Ben Jackson
  • 78,375
  • 8
  • 86
  • 141
17

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

Joshua Ball
  • 21,272
  • 6
  • 22
  • 26
coffman21
  • 642
  • 8
  • 15
  • 1. in my version (2.25.0.windows.1) there's a space **before** "M" and "D". 2. There's also another state - "??" which I'm not sure how to interpret. – itsho Feb 24 '20 at 14:23
  • @itsho the space indicates that it is not staged. This answer is correct because it matches on the first character in the line. If the first char is set then it's a staged file. If it's a space it's ignored. – Avner Apr 06 '20 at 06:09
  • 1
    This is genius! - there should be a git flag for similar thing – Norfeldt Sep 09 '20 at 20:47
5

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

It might be of use to anyone else. So adding it to the stack of answers.

Norfeldt
  • 5,230
  • 13
  • 70
  • 118
2

To view which files are staged ,

git ls-files
Babai
  • 89
  • 12
1

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

velocity
  • 1,070
  • 13
  • 22