'How to find which files have not changed since commit?
In git, how can one find out which files in directory have NOT changed since some commit?
Solution 1:[1]
IMO a far easier way to generate your list would be the following command chain:
git ls-files --full-name | grep -v "$(git diff --name-only <REF>)"
Where <REF>
is the hash of the commit from which you want the unchanged files since.
git ls-files
list, as you could expect, all versioned files and then you grep all files which aren't in the list of changed files since the specified commit.
Solution 2:[2]
Use git diff --name-only $REV
to get the list of files that have changed. Use git -C $(git rev-parse --show-toplevel) ls-tree -r HEAD --name-only
to get the list of all files. Use grep
to separate the sets:
git diff ${REV?must specify a REV} --name-only > /tmp/list
git -C $(git rev-parse --show-toplevel) ls-tree -r HEAD --name-only |
grep -f /tmp/list -v
Prior to executing those commands, you'll need to specify a rev in the variable REV. eg, REV=HEAD~6
or REV=branch-name~~
Solution 3:[3]
Note the suggested solutions treat file deletion after a commit as a change after it.
Also on a large git repo, the suggested one-liners did not work for me with the thrown error: grep: Argument list too long
.
So, I had to work with files:
$ git ls-files --full-name | sort > all.git
$ git diff --name-only <REF> | sort > recent.change
$ comm -12 all.git recent > recent.change.not.deleted
$ comm -13 all.git recent.change.not.deleted
comm
is a linux utility that shows common and unique lines in two files. Hopefully similar utilities exist for other platforms.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | santervo |
Solution 2 | William Pursell |
Solution 3 |