I have a bunch of commits in the repo. I want to see a list of files changed between two commits – from SHA1 to SHA2.
What command should I use?
git diff --name-only SHA1 SHA2
where you only need to include enough of the SHA to identify the commits. You can also do, for example
git diff --name-only HEAD~10 HEAD~5
to see the differences between the tenth latest commit and the fifth latest (or so).
git diff --name-status [SHA1 [SHA2]]
is like –name-only, except you get a simple prefix telling you what happened to the file (modified, deleted, added…)
git log --name-status --oneline [SHA1..SHA2]
is similar, but commits are listed after the commit message, so you can see when a file was changed.
if you’re interested in just what happened to certain files/folders you can append
-- <filename> [<filename>...]to the
if you want to see what happened for a single commit, call it SHA1, then do
git log --name-status --oneline [SHA1^..SHA1]
File status flags:
M modified – File has been modified
C copy-edit – File has been copied and modified
R rename-edit – File has been renamed and modified
A added – File has been added
D deleted – File has been deleted
U unmerged – File has conflicts after a merge
It seems that no one has mentioned the switch
$ git diff --stat HEAD~5 HEAD .../java/org/apache/calcite/rex/RexSimplify.java | 50 +++++++++++++++++----- .../apache/calcite/sql/fun/SqlTrimFunction.java | 2 +- .../apache/calcite/sql2rel/SqlToRelConverter.java | 16 +++++++ .../org/apache/calcite/util/SaffronProperties.java | 19 ++++---- .../org/apache/calcite/test/RexProgramTest.java | 24 +++++++++++ .../apache/calcite/test/SqlToRelConverterTest.java | 8 ++++ .../apache/calcite/test/SqlToRelConverterTest.xml | 15 +++++++ pom.xml | 2 +- .../apache/calcite/adapter/spark/SparkRules.java | 7 +-- 9 files changed, 117 insertions(+), 26 deletions(-)
There are also
$ git diff --numstat HEAD~5 HEAD 40 10 core/src/main/java/org/apache/calcite/rex/RexSimplify.java 1 1 core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java 16 0 core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java 8 11 core/src/main/java/org/apache/calcite/util/SaffronProperties.java 24 0 core/src/test/java/org/apache/calcite/test/RexProgramTest.java 8 0 core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java 15 0 core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml 1 1 pom.xml 4 3 spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java
$ git diff --shortstat HEAD~5 HEAD 9 files changed, 117 insertions(+), 26 deletions(-)
But for seeing the files changed between your branch and its common ancestor with another branch (say origin/master):
git diff --name-only `git merge-base origin/master HEAD`
To supplement @artfulrobot’s answer, if you want to show changed files between two branches:
git diff --name-status mybranch..myotherbranch
Be careful on precedence. If you place the newer branch first then it would show files as deleted rather than added.
grep can refine things further:
git diff --name-status mybranch..myotherbranch | grep "A\t"
That will then show only files added in
Add below alias to your
~/.bash_profile, then run,
source ~/.bash_profile; now anytime you need to see the updated files in the last commit, run,
showfiles from your git repository.
alias showfiles='git show --pretty="format:" --name-only'
This will show the changes in files:
git diff --word-diff SHA1 SHA2
Also note, if you just want to see the changed files between the last commit and the one before it. This works fine:
git show --name-only
git log –pretty=oneline >C:\filename.log
which will log only a oneline (–pretty=oneline) thats the name of the changed file. Also will log all the details to your output file.
As artfulrobot said in his answer:
git diff --name-status [SHA1 [SHA2]]
git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 4b95d595812211553070046bf2ebd807c0862cca M views/layouts/default.ctp M webroot/css/theme.css A webroot/img/theme/logo.png
Just for someone who needs to focus only on Java files, this is my solution:
git diff --name-status SHA1 SHA2 | grep '\.java$'
The following works well for me:
$ git show --name-only --format=tformat: SHA1..SHA2
It can also be used with a single commit:
git show --name-only --format=tformat: SHA1
which is handy for use in Jenkins where you are provided with a List of changeSet SHA’s, and want to iterate over them to see which files have been changed.
This is similar to a couple of the answers above, but using
tformat: rather than
format: removes the separator space between commits.
git diff --name-status I wrote the git-diffview git extension that renders a hierarchical tree view of what changed between two paths.