Я ищу простую команду git
, которая предоставляет красиво отформатированный список всех файлов, которые были частью коммита, заданного хешем (SHA1), без посторонней информации.
Я пробовал:
git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Хотя в нем перечислены файлы, он также включает нежелательную информацию о различиях для каждого.
Есть ли другая команда git
, которая предоставит только тот список, который мне нужен, чтобы я мог избежать анализа его из вывода git show
?
Предпочитаемый путь (потому что это команда 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
состоит в том, чтобы перечитать в поддеревьяЕсли вы хотите получить список измененных файлов:
git diff-tree --no-commit-id --name-only -r <commit-ish>
Если вы хотите получить список всех файлов в коммите, вы можете использовать
git ls-tree --name-only -r <commit-ish>
Я лично использую комбинацию - 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
Вы также можете сделать
git log --name-only
и вы можете просматривать различные коммиты, сообщения о коммитах и измененные файлы.
Введите q, чтобы вернуть вашу подсказку.
Недавно мне нужно было перечислить все измененные файлы между двумя коммитами. Поэтому я использовал эту (также * 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
Самая простая форма:
git show - stat (hash)
Это легче запомнить, и оно даст вам всю необходимую информацию.
Если вам действительно нужны только имена файлов, вы можете добавить опцию --name-only
.
git show - stat --name-only (hash)
Я использую псевдоним измененный довольно часто. Чтобы настроить это:
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
Использование стандартной команды git diff (также подходит для сценариев):
git diff --name-only <sha>^ <sha>
Если вы хотите также статус измененных файлов:
git diff --name-status <sha>^ <sha>
Это хорошо работает с коммитами слияния.
Хорошо, есть несколько способов показать все файлы в определенном коммите...
Чтобы уменьшить информацию и показать только имена файлов, которые были зафиксированы, вы просто можете добавить флаг --name-only
или --name-status
...Эти флаги просто показывают вам имена файлов, которые отличаются от предыдущих коммитов по вашему желанию...
Таким образом, вы можете сделать git diff
, а затем -- name-only
, с двумя хэшами коммита после < sha0 > < sha1 >
, что-то вроде ниже:
git diff --name-only 5f12f15 kag9f02
Я также создаю изображение ниже, чтобы показать все шаги, которые необходимо выполнить в этой ситуации:
Я использую это, чтобы получить список измененных файлов между двумя наборами изменений:
git diff --name-status <SHA1> <SHA2> | cut -f2
Мне нравится использовать
git show --stat <SHA1>^..<SHA2>
Есть также git whatchanged
, который является более низким уровнем, чем git log
NAME
git-whatchanged - Show logs with difference each commit introduces
Он выводит сводку коммита со списком файлов под ним с их режимами и, если там добавлено (A
), удалено (D
) или изменено (M
) ;
$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363
Дало бы что-то вроде:
commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <[email protected]>
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
...
Я знаю, что этот ответ на самом деле не соответствует "без посторонней информации.", но я все еще думаю, что этот список более полезен, чем просто имена файлов.
попробуйте эту команду для имени и изменения количества строк
git show --stat <commit-hash>
только показать имена файлов
git show --stat --name-only <commit-hash>
для получения последнего хеша коммита, затем попробуйте эту команду
git log -1
последний коммит с отображением имени файла и статуса файла: изменение, создание или удаление
git log -1 --oneline --name-status <commit-hash>
или для всех
git log
для более продвинутой информации git log прочитайте эту статью
Используйте простую команду из одной строки, если вы просто хотите изменить список файлов в последнем коммите:
git diff HEAD~1 --name-only
Перечислите файлы, которые изменились в коммите:
git diff --name-only SHA1^ SHA1
Это не показывает сообщения журнала, дополнительные новые строки или любой другой беспорядок. Это работает для любого коммита, а не только для текущего. Не уверен, почему это еще не было упомянуто, поэтому я добавляю это.
Нашел идеальный ответ на этот вопрос:
git show --name-status --oneline <commit-hash>
Так что я могу знать
which files were just modified M
Which files were newly added , A
Which files were deleted , D