Как вывести список всех файлов в коммите? - PullRequest
2463 голосов
/ 08 января 2009

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

Я пробовал:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

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

Ответы [ 29 ]

3302 голосов
/ 08 января 2009

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

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

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

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

  • --no-commit-id подавляет вывод идентификатора фиксации.
  • Аргумент --pretty задает пустую строку формата, чтобы избежать путаницы в начале.
  • Аргумент --name-only показывает только имена файлов, которые были затронуты (Спасибо, Хэнк).
  • Аргумент -r состоит в том, чтобы переходить в поддеревья
209 голосов
/ 14 января 2009

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

git diff-tree --no-commit-id --name-only -r <commit-ish>

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

git ls-tree --name-only -r <commit-ish>
198 голосов
/ 08 января 2009

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

157 голосов
/ 12 июля 2012

Я лично использую комбинацию - 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
65 голосов
/ 26 апреля 2010

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

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
64 голосов
/ 27 мая 2014

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

git log --name-only

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

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

56 голосов
/ 16 июля 2016

Простейшая форма:

git show --stat (hash)

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

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

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

47 голосов
/ 29 апреля 2013

Я использую измененный псевдоним довольно часто. Для настройки:

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
38 голосов
/ 29 апреля 2011

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

git diff --name-only <sha>^ <sha>

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

git diff --name-status <sha>^ <sha>

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

29 голосов
/ 15 мая 2018

Использование

git log --name-status

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

...