git - How to list only the names of files that changed between two commits

ID : 336

viewed : 31

Tags : gitgit-diffgit-showgit

Top 5 Answer for git - How to list only the names of files that changed between two commits

vote vote

97

git diff --name-only SHA1 SHA2 

where you only need to include enough of the SHA hash 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).

vote vote

82

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 git log version.

  • 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:

Flag Name Meaning
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
vote vote

74

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(-) 
vote vote

68

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` 
vote vote

57

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.

Adding a grep can refine things further:

git diff --name-status mybranch..myotherbranch | grep "A\t" 

That will then show only files added in myotherbranch.

Top 3 video Explaining git - How to list only the names of files that changed between two commits

Related QUESTION?