Вопрос: Как указать только имена файлов, которые изменились между двумя коммитами?


У меня есть куча коммитов в репо. Я хочу просмотреть список файлов, измененных между двумя коммитами: от SHA1 до SHA2.

Какую команду я должен использовать?


1439


источник


Ответы:


git diff --name-only SHA1 SHA2

где вам нужно только включить достаточное количество SHA для идентификации коммитов. Вы также можете сделать, например

git diff --name-only HEAD~10 HEAD~5

чтобы увидеть различия между десятой последней фиксацией и пятой последней (или так).


1960



git diff --name-status [SHA1 [SHA2]]

как -name-only, за исключением того, что вы получаете простой префикс, рассказывающий вам, что случилось с файлом (изменено, удалено, добавлено ...)

git log --name-status --oneline [SHA1..SHA2]

аналогичен, но коммиты перечислены после сообщения фиксации, поэтому вы можете видеть, когда файл был изменен.

  • если вас интересует только то, что произошло с определенными файлами / папками, которые вы можете добавить -- <filename> [<filename>...]к git logверсия.

  • если вы хотите узнать, что произошло для одной фиксации, назовите ее SHA1, затем выполните
    git log --name-status --oneline [SHA1^..SHA1]

Флаги состояния файла:
M изменено - файл был изменен
C copy-edit - Файл скопирован и изменен
R rename-edit - Файл был переименован и изменен
Добавлен файл - Добавлен файл
D удален - Файл удален
U unmerged - Файл имеет конфликты после слияния


338



Но для просмотра файлов, которые были изменены между вашей веткой и ее общим предком с другой ветвью (например, origin / master):

git diff --name-only `git merge-base origin/master HEAD`

41



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

22



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.


17



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'

8



This will show the changes in files:

git diff --word-diff SHA1 SHA2

7



Use 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.


3



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


2



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

1



Based on git diff --name-status I wrote the git-diffview git extension that renders a hierarchical tree view of what changed between two paths.


0