Как перечислить все файлы в коммите?

Я ищу простую команду git, которая предоставляет красиво отформатированный список всех файлов, которые были частью коммита, заданного хешем (SHA1), без посторонней информации.

Я пробовал:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

Есть ли другая команда git, которая предоставит только тот список, который мне нужен, чтобы я мог избежать анализа его из вывода git show?

Комментарии к вопросу (3)
Решение

Предпочитаемый путь (потому что это команда plumbing; предназначена для программирования):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

Другой путь (менее предпочтительный для сценариев, потому что это команда porcelain; предназначена для работы с пользователем)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • --no-commit-id подавляет вывод идентификатора фиксации.
  • Аргумент -- pretty указывает пустую строку формата, чтобы избежать сути в начале.
  • Аргумент --name-only показывает только имена файлов, которые были затронуты (Спасибо, Хэнк). Вместо этого используйте --name-status, если вы хотите увидеть, что случилось с каждым файлом ( D eleted, M odified, A dded)
  • Аргумент -r состоит в том, чтобы перечитать в поддеревья
Комментарии (24)

Если вы хотите получить список измененных файлов:

git diff-tree --no-commit-id --name-only -r 

Если вы хотите получить список всех файлов в коммите, вы можете использовать

git ls-tree --name-only -r 
Комментарии (11)

Я просто предположу, что gitk не нужен для этого. В этом случае попробуйте git show --name-only < sha >.

Комментарии (3)

Я лично использую комбинацию - stat и - oneline с командой show :

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

Если вам не нравится / не нужна статистика добавления / удаления, вы можете заменить - stat на - только имя

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD
Комментарии (6)

Вы также можете сделать

git log --name-only

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

Введите q, чтобы вернуть вашу подсказку.

Комментарии (2)

Недавно мне нужно было перечислить все измененные файлы между двумя коммитами. Поэтому я использовал эту (также * nix specific) команду

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

Обновление : Или, как указывает Итан ниже

git diff --name-only START_COMMIT..END_COMMIT

Использование --name-status также будет включать изменение (добавлено, изменено, удалено и т. Д.) Рядом с каждым файлом

git diff --name-status START_COMMIT..END_COMMIT
Комментарии (4)

Самая простая форма:

git show - stat (hash)

Это легче запомнить, и оно даст вам всю необходимую информацию.

Если вам действительно нужны только имена файлов, вы можете добавить опцию --name-only.

git show - stat --name-only (hash)

Комментарии (2)

Я использую псевдоним измененный довольно часто. Чтобы настроить это:

git config --global alias.changed 'show --pretty="format:" --name-only'

тогда:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

Подобные команды, которые могут быть полезны:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only
Комментарии (0)

Использование стандартной команды git diff (также подходит для сценариев):

git diff --name-only ^ 

Если вы хотите также статус измененных файлов:

git diff --name-status ^ 

Это хорошо работает с коммитами слияния.

Комментарии (0)

Использовать

git log --name-status

Это покажет вам идентификатор коммита, сообщение, измененные файлы и были ли они изменены, созданы, добавлены или удалены. Несколько из команды «все в одном».

Комментарии (1)

& Лт; pre > $ git log 88ee8 ^..88ee8 - только имя - pretty = "формат:" & Лт; / pre >

Комментарии (0)

Хорошо, есть несколько способов показать все файлы в определенном коммите...

Чтобы уменьшить информацию и показать только имена файлов, которые были зафиксированы, вы просто можете добавить флаг --name-only или --name-status...Эти флаги просто показывают вам имена файлов, которые отличаются от предыдущих коммитов по вашему желанию...

Таким образом, вы можете сделать git diff, а затем -- name-only, с двумя хэшами коммита после < sha0 > < sha1 >, что-то вроде ниже:

git diff --name-only 5f12f15 kag9f02 

Я также создаю изображение ниже, чтобы показать все шаги, которые необходимо выполнить в этой ситуации:

Комментарии (1)

Я использую это, чтобы получить список измененных файлов между двумя наборами изменений:

git diff --name-status   | cut -f2
Комментарии (2)

Мне нравится использовать

git show --stat ^..
Комментарии (0)

Есть также git whatchanged, который является более низким уровнем, чем git log

NAME
       git-whatchanged - Show logs with difference each commit introduces

Он выводит сводку коммита со списком файлов под ним с их режимами и, если там добавлено (A), удалено (D) или изменено (M) ;

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

Дало бы что-то вроде:

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx 
Date:   Tue Sep 29 17:23:22 2015 +0200

    added fb skd and XLForm

:000000 100644 0000000... 90a20d7... A  Pods/Bolts/Bolts/Common/BFCancellationToken.h
:000000 100644 0000000... b5006d0... A  Pods/Bolts/Bolts/Common/BFCancellationToken.m
:000000 100644 0000000... 3e7b711... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h
:000000 100644 0000000... 9c8a7ae... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m
:000000 100644 0000000... bd6e7a1... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h
:000000 100644 0000000... 947f725... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m
:000000 100644 0000000... cf7dcdf... A  Pods/Bolts/Bolts/Common/BFDefines.h
:000000 100644 0000000... 02af9ba... A  Pods/Bolts/Bolts/Common/BFExecutor.h
:000000 100644 0000000... 292e27c... A  Pods/Bolts/Bolts/Common/BFExecutor.m
:000000 100644 0000000... 827071d... A  Pods/Bolts/Bolts/Common/BFTask.h
...

Я знаю, что этот ответ на самом деле не соответствует "без посторонней информации.", но я все еще думаю, что этот список более полезен, чем просто имена файлов.

Комментарии (1)

попробуйте эту команду для имени и изменения количества строк

git show --stat 

только показать имена файлов

git show --stat --name-only  

для получения последнего хеша коммита, затем попробуйте эту команду

git log -1

последний коммит с отображением имени файла и статуса файла: изменение, создание или удаление

 git log -1 --oneline --name-status 

или для всех

git log

для более продвинутой информации git log прочитайте эту статью

https://devhints.io/git-log-format

https://devhints.io/git-log

Комментарии (3)

Используйте простую команду из одной строки, если вы просто хотите изменить список файлов в последнем коммите:

git diff HEAD~1 --name-only
Комментарии (1)

Мне нравится это:

git diff --name-status  ^
Комментарии (1)

Перечислите файлы, которые изменились в коммите:

git diff --name-only SHA1^ SHA1

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

Комментарии (2)

Нашел идеальный ответ на этот вопрос:

git show --name-status --oneline 

Так что я могу знать

which files were just modified M

Which files were newly added , A

Which files were deleted , D
Комментарии (0)