git: show all files changed between two commits
Solution 1:
This is the best I could come up with:
git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq
Replace HEAD^^ and HEAD with the commits you want to compare.
My attempt uses git log
with --name-only
to list all files of each commit between the specified ones. --pretty=oneline
makes the part above the file listing consist only of the commit SHA and message title. --full-index
makes the SHA be the full 40 characters. grep
filters out anything looking like a SHA followed by a space. Unless you have files beginning with a SHA followed by a space, the result should be accurate.
Solution 2:
I think this command is your answer:
git diff --stat abc123 xyz123 # where abc123 and xyz123 are SHA1 hashes of commit objects
Straight from the git community book:
If you don't want to see the whole patch, you can add the '--stat' option, which will limit the output to the files that have changed along with a little text graph depicting how many lines changed in each file.
Solution 3:
If just want to see the file names where commit b
is chronologically after a
:
git diff <a commit sha1>...<b commit sha2> --name-only # b is after a in time
If you want to see all the file names and what was changed from commit a to commit b then drop the last argument.
git diff <a commit sha1>...<b commit sha2> # shows file names and what changed in each file
An example of <commit sha1>
are the commit id's like 675ee6860d2c273bcc6c6a0536634a107e2a3d9f
. Generally the first 8-10 digits will work on most projects, but may need more if the project has oodles of commits. Typically I use the output of the id from git log --oneline
.
When you get a difference of a...b and b is later than a in time it's easy to see what was changed in each file chronologically.