I have a bunch of commits in the repository. I want to see a list of files changed between two commits - from SHA1 to SHA2.
What command should I use?
I have a bunch of commits in the repository. I want to see a list of files changed between two commits - from SHA1 to SHA2.
What command should I use?
It seems that no one has mentioned the switch --stat:
$ 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 --numstat
$ 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
and --shortstat
$ 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`
The biggest issue with every previous answer is that you get fed into a pager which is extremely annoying if you want to use the information you're trying to get out of the repository. Especially if you're a developer that would rather be learning the business logic of the application your supposed to be developing instead of learning vim commands.
Using --no-pager solves that issue.
git --no-pager diff --name-only sha1 sha2
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 hash values, and want to iterate over them to see which files have been changed.
This is similar to a couple of the previous answers, but using tformat: rather than format: removes the separator space between commits.
Just for someone who needs to focus only on Java files, this is my solution:
git diff --name-status SHA1 SHA2 | grep '\.java$'
In case someone is looking for the list of changed files, including staged files
git diff HEAD --name-only --relative --diff-filter=AMCR
git diff HEAD --name-only --relative --diff-filter=AMCR sha-1 sha-2
Remove --relative if you want absolute paths.
As artfulrobot said in his answer:
git diff --name-status [SHA1 [SHA2]]
My example:
git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997
4b95d595812211553070046bf2ebd807c0862cca
M views/layouts/default.ctp
M webroot/css/theme.css
A webroot/img/theme/logo.png