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

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

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

Ответы

Ответ 1

git diff --name-only SHA1 SHA2

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

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

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

Ответ 2

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 - Файл имеет конфликты после слияния

Ответ 3

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

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

Ответ 4

Кажется, никто не упомянул переключатель --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(-)

Есть также --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

и --shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

Ответ 5

Чтобы добавить @artfulrobot ответ, если вы хотите показать измененные файлы между двумя ветвями:

git diff --name-status mybranch..myotherbranch

Будьте осторожны с приоритетом. Если вы поместите новую ветку сначала, тогда она будет показывать файлы как удаленные, а не добавленные.

Добавление grep может дополнительно уточнить:

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

Затем будут показаны только файлы, добавленные в myotherbranch.

Ответ 6

Добавьте ниже псевдоним к вашему ~/.bash_profile, затем запустите source ~/.bash_profile; теперь в любое время вам нужно увидеть обновленные файлы в последнем коммите, запустить, showfiles из вашего репозитория git.

alias showfiles='git show --pretty="format:" --name-only'

Ответ 7

Это покажет изменения в файлах:

git diff --word-diff SHA1 SHA2

Ответ 8

Использование git log --pretty = oneline > C:\filename.log

который будет регистрировать только oneline (--pretty = oneline), который является именем измененного файла. Также будет записывать все данные в выходной файл.

Ответ 9

Также обратите внимание, если вы просто хотите увидеть измененные файлы между последним фиксатором и тем, который был перед ним. Это отлично работает: git show --name-only

Ответ 10

Как сказал artfulrobot в своем ответе:

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

Ответ 11

На основе git diff --name-status я написал расширение git-diffview git, которое отображает иерархическое древовидное представление того, что изменилось между двумя путями.

Ответ 12

Следующее хорошо работает для меня:

$ git show --name-only --format=tformat: SHA1..SHA2

Его также можно использовать с одним коммитом:

git show --name-only --format=tformat: SHA1

который удобен для использования в Jenkins, где вам предоставляется список SHA changeSet, и вы хотите просмотреть их, чтобы посмотреть, какие файлы были изменены.

Это похоже на пару ответов выше, но с использованием tformat: вместо format: удаляет разделитель между коммитами.

Ответ 13

Просто для тех, кому нужно сосредоточиться только на файлах Java, вот мое решение:

 git diff --name-status SHA1 SHA2 | grep '\.java$'