Как вывести список всех файлов в коммите Git без отображения информации о различиях?
Мне нужно вывести простой список всех файлов, которые были частью конкретного коммита. Когда я использую следующую команду, она выводит файлы, но также включает нежелательную информацию о различиях для каждого файла:
git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Какую команду Git или какой параметр можно использовать, чтобы получить только список файлов, измененных в коммите, без вывода различий?
Чтобы вывести список всех файлов в коммите Git без отображения информации о различиях, используйте опцию --name-only с командой git show. Правильная команда будет выглядеть как git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d, которая отобразит только пути к файлам без какого-либо содержимого различий. Эта опция специально разработана для отображения только имен файлов, которые были изменены в коммите.
Содержание
- Базовое решение: Использование --name-only
- Альтернативные методы
- Комбинирование с другими опциями
- Практические примеры
- Продвинутые техники перечисления файлов
Базовое решение: Использование --name-only
Самый простой способ вывести список файлов в коммите без вывода различий — использовать опцию --name-only (или -s) с командой git show. Эта опция подавляет вывод различий и показывает только пути к файлам, которые были изменены в указанном коммите.
git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Эта команда выведет что-то вроде:
src/main.js
README.md
package.json
Флаг --name-only является псевдонимом для --name-status, который показывает состояние каждого файла (изменен, добавлен или удален) вместе с именем файла. Если вам нужны только имена файлов без каких-либо индикаторов состояния, вы можете объединить его с --pretty=format:.
Альтернативные методы
Использование git diff-tree
Другой подход — использовать git diff-tree с опцией --name-only:
git diff-tree --no-commit-id --name-only -r a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Эта команда:
--no-commit-id: Подавляет вывод ID коммита--name-only: Показывает только имена файлов-r: Обрабатывает каждое дерево рекурсивно
Использование git log
Вы также можете использовать git log с определенными опциями форматирования:
git log --name-only --format=format: a303aa90779efdd2f6b9d90693e2cbbbe4613c1d -1
Опция -1 ограничивает вывод только одним коммитом.
Комбинирование с другими опциями
Добавление информации о коммите
Если вы хотите видеть сообщение коммита вместе со списком файлов:
git show --name-only --format=format:"%H %s%n" a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Это покажет хэш коммита, тему, а затем имена файлов.
Фильтрация типов файлов
Вы можете передать вывод для фильтрации по определенным типам файлов:
git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d | grep "\.js$"
Это покажет только JavaScript файлы, измененные в этом коммите.
Подсчет файлов
Чтобы подсчитать количество файлов, измененных в коммите:
git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d | wc -l
Практические примеры
Пример 1: Базовый список файлов
$ git show --name-only HEAD src/components/Header.js src/components/Footer.js src/utils/helpers.js package.json
Пример 2: С индикаторами состояния
$ git show --name-status HEAD M src/components/Header.js A src/components/Footer.js D src/utils/helpers.js M package.json
Индикаторы состояния означают:
M= Изменен (Modified)A= Добавлен (Added)D= Удален (Deleted)R= Переименован (Renamed)C= Скопирован (Copied)
Пример 3: Несколько коммитов
Чтобы увидеть файлы из нескольких коммитов:
git show --name-only HEAD~3..HEAD
Это показывает файлы, измененные в последних 3 коммитах.
Продвинутые техники перечисления файлов
Использование пользовательских форматов
Для большего контроля над форматом вывода:
git show --pretty=format:"Commit: %H%nAuthor: %an%nDate: %ad%n%nFiles:" --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Получение полных путей
Чтобы получить полные пути вместо относительных:
git show --name-only --pretty=format: --root a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Сортировка файлов
Чтобы отсортировать список файлов по алфавиту:
git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d | sort
Создание скрипта
Вы можете создать переиспользуемый скрипт или функцию:
# В вашем .bashrc или .zshrc
list_commit_files() {
if [ -z "$1" ]; then
echo "Usage: list_commit_files <commit-hash>"
return 1
fi
git show --name-only --pretty=format: "$1"
}
Затем используйте его как:
list_commit_files a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Источники
- Документация Git - git show
- Документация Git - git diff-tree
- Документация Git - git log
- Книга Pro Git - Просмотр истории коммитов
Заключение
Самый эффективный способ вывести список файлов в коммите Git без информации о различиях — использовать git show --name-only <commit-hash>. Эта команда обеспечивает чистый и простой вывод только путей к файлам, измененным в этом конкретном коммите. Для более сложных сценариев вы можете объединить эту опцию с различными флагами и опциями форматирования, чтобы настроить вывод в соответствии с вашими потребностями. Помните, что вы всегда можете передать вывод другим Unix-инструментам, таким как grep, sort или wc, для дальнейшей обработки и анализа файлов вашего коммита.