Как указать только имена файлов, которые изменились между двумя коммитами?
У меня есть куча коммитов в репо. Я хочу увидеть список файлов, измененных между двумя коммитами: от 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$'