У меня в репозитории куча коммитов. Я хочу увидеть список файлов, измененных между двумя фиксациями - с SHA1 на SHA2.
Какую команду мне использовать?
У меня в репозитории куча коммитов. Я хочу увидеть список файлов, измененных между двумя фиксациями - с SHA1 на SHA2.
Какую команду мне использовать?
git diff --name-only SHA1 SHA2
где вам нужно только включить достаточное количество хэша SHA для идентификации коммитов. Вы также можете, например,
git diff --name-only HEAD~10 HEAD~5
чтобы увидеть различия между десятым последним коммитом и пятым последним (или около того).
git show --name-only SHA1
.
- person August Lilleaas; 23.11.2009
git diff --name-status [TAG|SHA1]
показывает, какие операции были выполнены с файлами
- person reconbot; 28.09.2011
git log -p --name-only
- person Lenny Sirivong; 21.03.2013
--name-only
показывает только файлы, которые были изменены ... теперь, если я сделаю git diff SHA1 SHA2
, я увижу весь код ... для больших коммитов это может выглядеть очень плохо в интерфейсе командной строки ... есть ли программное обеспечение с графическим интерфейсом ( то есть инструмент сравнения, такой как diffmerge), который может принимать такую команду git и визуально отображать разницу?
- person abbood; 13.12.2013
git diff --word-diff SHA1 SHA2
- person Julio Marins; 04.12.2014
git diff --name-status
, похоже, не хочет отображать добавленные файлы. @sschuberth указал на git show
, который, похоже, у меня работает правильно: git show --pretty=format: --name-status
. Простое выполнение git show --name-status
дает немного больше информации, но все же красиво и плотно ... это будет моя новая команда goto;)
- person travc; 15.06.2017
git log --author
?
- person tonix; 19.11.2018
git diff --name-only HEAD^
для того, что изменилось в самой последней фиксации
- person starscream_disco_party; 23.05.2019
git status
показывает список измененных файлов, вы можете сделать git diff --name-only
, чтобы получить тот же список без префикса modified:. Полезно, если вы хотите направить вывод для обработки.
- person Nagev; 25.06.2019
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 - Файл был переименован и изменен
A добавлен - Файл был добавлен
D удален - Файл удален
U unmerged - Файл конфликтует после слияния
--relative[=<path>]
может вам помочь, я не уверен. Иначе всегда | erep -v '(.tmp|.foo|.dontwant)$'
...
- person artfulrobot; 15.10.2014
egrep
?
- person David Moles; 05.05.2021
Похоже, что никто не упомянул о переключателе --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(-)
Но для просмотра файлов, измененных между вашей веткой и ее общим предком с другой веткой (скажем, origin / master):
git diff --name-only `git merge-base origin/master HEAD`
git diffstatus master
или что-то подобное, что вызывает вышеупомянутое.
- person oma; 04.06.2013
git diff --name-only HEAD...master
(обратите внимание на три точки). Подробное объяснение см. здесь.
- person ostrokach; 26.12.2016
git diff --name-only master..branch
не соответствует списку PR github. Так точнее. Но в любом случае у меня есть 173 измененных файла против 171 в PR на github. (без merge-base
у меня 228 против 171)
- person x'ES; 19.05.2017
Чтобы дополнить ответ @artfulrobot, если вы хотите показать измененные файлы между двумя ветвями:
git diff --name-status mybranch..myotherbranch
Будьте осторожны с приоритетом. Если вы сначала разместите новую ветку, тогда файлы будут отображаться как удаленные, а не добавленные.
Добавление grep
может улучшить ситуацию:
git diff --name-status mybranch..myotherbranch | grep "A\t"
Тогда будут показаны только файлы, добавленные в myotherbranch
.
--diff-filter
, который предоставляет эту функцию изначально, что означает меньшую вероятность получения неверных результатов (например, ложных срабатываний).
- person Jasper; 19.02.2015
"A\t"
. Вам нужно grep "^A\t"
- person phuclv; 04.11.2020
Это покажет изменения в файлах:
git diff --word-diff SHA1 SHA2
Добавьте указанный ниже псевдоним в свой ~/.bash_profile
файл, а затем запустите source ~/.bash_profile
; теперь в любое время, когда вам нужно увидеть обновленные файлы в последней фиксации, запустите showfiles
из репозитория git.
alias showfiles='git show --pretty="format:" --name-only'
git config --global alias.showfiles 'show --pretty="format:" --name-only'
сделать git showfiles
.
- person cgmb; 09.10.2017
Также обратите внимание, что если вы просто хотите увидеть измененные файлы между последней фиксацией и предыдущей, это отлично работает:
git show --name-only
Вот мое решение для тех, кому нужно сосредоточиться только на файлах Java:
git diff --name-status SHA1 SHA2 | grep '\.java$'
Как сказал артфулробот в своем ответе:
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
Использовать
git log --pretty=oneline > C:\filename.log
который будет регистрировать только одну строку (--pretty=oneline
), являющуюся именем измененного файла. Он также сохранит все подробности в вашем выходном файле.
git log --pretty=oneline
дает мне только SHA и сообщение фиксации с использованием git 2.10.1
- person damd; 17.11.2016
Для меня хорошо работает следующее:
git show --name-only --format=tformat: SHA1..SHA2
Его также можно использовать с одной фиксацией:
git show --name-only --format=tformat: SHA1
что удобно для использования в Jenkins, где вам предоставляется список хэш-значений SHA набора изменений и хотите перебрать их, чтобы увидеть, какие файлы были изменены.
Это похоже на пару предыдущих ответов, но использование tformat:
вместо format:
удаляет разделительный пробел между коммитами.
На основе git diff --name-status
я написал расширение Git git-diffview, которое отображает в виде иерархического дерева то, что изменилось. между двумя путями.
На случай, если кто-то ищет список измененных файлов, включая поэтапные файлы
git diff HEAD --name-only --relative --diff-filter=AMCR
git diff HEAD --name-only --relative --diff-filter=AMCR sha-1 sha-2
Удалите --relative
, если вам нужны абсолютные пути.
Самая большая проблема с каждым предыдущим ответом заключается в том, что вас вводят в пейджер, что очень раздражает, если вы хотите использовать информацию, которую пытаетесь получить из репозитория. Особенно, если вы разработчик, который предпочел бы изучать бизнес-логику приложения, которое вы должны разрабатывать, вместо того, чтобы изучать команды vim.
Использование --no-pager решает эту проблему.
git --no-pager diff --name-only sha1 sha2