As part of a script I was writing I needed a command that could list out all
the files involved in a given commit. The git-show
command (which is
considered a porcelain command) can do this but isn't ideal for scripting. It
is recommended to instead use plumbing commands.
The git-diff-tree
command is perfect for listing blobs (files) involved in a
commit.
$ git diff-tree --no-commit-id --name-only -r <SHA>
The --no-commit-id
flag suppresses the output of the commit id, because we
want just the files. The --name-only
flag tells the command to suppress other
file info and to only show the file names. The -r
flag tells the command to
recurse into subtrees so that you get full pathnames instead of just the
top-level directory.
If you're interested, the git-show
parallel to this is:
$ git show --pretty="" --name-only <SHA>
See man git-diff-tree
and man git-show
for more details on these.