НейроАгент

Git Show Только Файлы: Список Файлов Коммита Без Diff

Узнайте, как выводить список файлов в коммите Git без вывода diff. Используйте команду git show --name-only для отображения только измененных путей к файлам. Полное руководство с примерами и альтернативами.

Вопрос

Как вывести список всех файлов в коммите Git без отображения информации о различиях?

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

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Какую команду Git или какой параметр можно использовать, чтобы получить только список файлов, измененных в коммите, без вывода различий?

НейроАгент

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

Содержание

Базовое решение: Использование --name-only

Самый простой способ вывести список файлов в коммите без вывода различий — использовать опцию --name-only (или -s) с командой git show. Эта опция подавляет вывод различий и показывает только пути к файлам, которые были изменены в указанном коммите.

bash
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:

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

Эта команда:

  • --no-commit-id: Подавляет вывод ID коммита
  • --name-only: Показывает только имена файлов
  • -r: Обрабатывает каждое дерево рекурсивно

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

Вы также можете использовать git log с определенными опциями форматирования:

bash
git log --name-only --format=format: a303aa90779efdd2f6b9d90693e2cbbbe4613c1d -1

Опция -1 ограничивает вывод только одним коммитом.

Комбинирование с другими опциями

Добавление информации о коммите

Если вы хотите видеть сообщение коммита вместе со списком файлов:

bash
git show --name-only --format=format:"%H %s%n" a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Это покажет хэш коммита, тему, а затем имена файлов.

Фильтрация типов файлов

Вы можете передать вывод для фильтрации по определенным типам файлов:

bash
git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d | grep "\.js$"

Это покажет только JavaScript файлы, измененные в этом коммите.

Подсчет файлов

Чтобы подсчитать количество файлов, измененных в коммите:

bash
git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d | wc -l

Практические примеры

Пример 1: Базовый список файлов

bash
$ git show --name-only HEAD
src/components/Header.js
src/components/Footer.js
src/utils/helpers.js
package.json

Пример 2: С индикаторами состояния

bash
$ 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: Несколько коммитов

Чтобы увидеть файлы из нескольких коммитов:

bash
git show --name-only HEAD~3..HEAD

Это показывает файлы, измененные в последних 3 коммитах.

Продвинутые техники перечисления файлов

Использование пользовательских форматов

Для большего контроля над форматом вывода:

bash
git show --pretty=format:"Commit: %H%nAuthor: %an%nDate: %ad%n%nFiles:" --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Получение полных путей

Чтобы получить полные пути вместо относительных:

bash
git show --name-only --pretty=format: --root a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Сортировка файлов

Чтобы отсортировать список файлов по алфавиту:

bash
git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d | sort

Создание скрипта

Вы можете создать переиспользуемый скрипт или функцию:

bash
# В вашем .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"
}

Затем используйте его как:

bash
list_commit_files a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Источники

  1. Документация Git - git show
  2. Документация Git - git diff-tree
  3. Документация Git - git log
  4. Книга Pro Git - Просмотр истории коммитов

Заключение

Самый эффективный способ вывести список файлов в коммите Git без информации о различиях — использовать git show --name-only <commit-hash>. Эта команда обеспечивает чистый и простой вывод только путей к файлам, измененным в этом конкретном коммите. Для более сложных сценариев вы можете объединить эту опцию с различными флагами и опциями форматирования, чтобы настроить вывод в соответствии с вашими потребностями. Помните, что вы всегда можете передать вывод другим Unix-инструментам, таким как grep, sort или wc, для дальнейшей обработки и анализа файлов вашего коммита.