Как перечислить только имена файлов, которые изменились между двумя коммитами? - PullRequest
1674 голосов
/ 12 октября 2009

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

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

Ответы [ 13 ]

2301 голосов
/ 12 октября 2009
git diff --name-only SHA1 SHA2

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

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

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

378 голосов
/ 26 июля 2011
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]

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

54 голосов
/ 20 октября 2017

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

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

git diff --name-only `git merge-base origin/master HEAD`
19 голосов
/ 22 октября 2013

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

git diff --name-status mybranch..myotherbranch

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

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

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

Это покажет только файлы, добавленные в myotherbranch.

8 голосов
/ 10 апреля 2015

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

alias showfiles='git show --pretty="format:" --name-only'
7 голосов
/ 04 декабря 2014

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

git diff --word-diff SHA1 SHA2
4 голосов
/ 01 октября 2015

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

3 голосов
/ 03 мая 2018

Как сказал 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
3 голосов
/ 10 сентября 2014

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

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

...