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

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

Я пытался:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

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

34 ответа

Решение

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

$ 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 аргумент состоит в том, чтобы превратиться в поддеревья

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

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

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

git ls-tree --name-only -r <commit-ish>

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

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

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

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

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-специфическую) команду

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 log --name-status

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

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

git show --stat <commit-hash>

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

git show --stat --name-only  <commit-hash>

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

git log -1 или для всех git log

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

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

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

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

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

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

      git show --pretty=%gd --stat <commit_id>

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

      git show --pretty=%gd --stat
$ git log 88ee8^..88ee8 --name-only --pretty="format:"
      git show --name-only a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

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

Так что вы можете сделать git diff с последующим --name-onlyс двумя коммитами после <sha0> <sha1>что-то вроде ниже:

git diff --name-only 5f12f15 kag9f02 

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

git diff - только для имени 5f12f15 kag9f02

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

git diff HEAD~1 --name-only

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

λ git log -m -1 --name-only --pretty="format:"
configs/anotherconfig.xml
configs/configsInRepo.xml

или же

λ git log -m -1 --name-status --pretty="format:"
A       configs/anotherconfig.xml
M       configs/configsInRepo.xml

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

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

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

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

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

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <xx@xx.nl>
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 diff --name-status <SHA1> <SHA2> | cut -f2

Я люблю использовать

git show --stat <SHA1>^..<SHA2>

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

git show --name-status --oneline <commit-hash>

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

which files were just modified M

Which files were newly added , A

Which files were deleted , D

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

git diff --name-status <SHA1> <SHA1>^
git show --name-only commitCodeHere

Возможно, я пропустил это, упоминал ли кто-нибудь, хотите ли вы увеличить журнал x предыдущих коммитов с помощью команды «log», чтобы включить имена файлов, которые были затронуты, а затем добавить --name-only в конце.

так:

      git log -n3

чтобы увидеть последние комментарии последних 3 коммитов.

      git log -n3 --name-only

чтобы увидеть комментарии и файлы, созданные в последних 3 коммитах.

Показать журнал.

COMMIT может быть пустым ("") или сокращенным sha-1 или sha-1.

git log COMMIT -1 --name-only

Это перечислит только файлы, очень полезные для дальнейшей обработки.

git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]"

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

git diff --name-only SHA1^ SHA1

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

Только список файлов (даже не сообщение о фиксации):

git show --name-only --pretty=format:

Например, откройте все измененные файлы в вашем редакторе:

"$EDITOR" $(git show --name-only --pretty=format:)

Существует простой трюк для просмотра в виде списка файлов, просто добавьте : после хеша.

git show 9d3a52c474:

Затем вы можете сверлить,

git show 9d3a52c474:someDir/someOtherDir

Если вы нажмете на файл, вы получите сырую версию файла; иногда это то, что вам нужно, если вы ищете только хорошую ссылку или ключевые фрагменты кода (различия могут привести к беспорядку),

git show 9d3a52c474:someDir/someOtherDir/somefile

Единственным недостатком этого метода является то, что он не может легко показать дерево файлов.

Сочетание "git show --stat"(спасибо Райан) и пара команд sed должны урезать данные для вас:

git show --stat <SHA1> | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

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

Перечислите все файлы в дереве фиксации:

git ls-tree --name-only --full-tree a21e610
Другие вопросы по тегам