Как перечислить все файлы в фиксации?

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

Я пробовал:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

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

Ответ 1

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

$ 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 показывает только имена файлов, которые были затронуты (спасибо Хэнк). Вместо этого используйте --name-status, если вы хотите увидеть, что случилось с каждым файлом (D eleted, M одифицирован, A dded)
  • Аргумент -r состоит в том, чтобы переходить в поддеревья

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

Я лично использую комбинацию - 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

Ответ 5

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

git log --name-only

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

Введите q, чтобы вернуть запрос.

Ответ 6

Недавно мне нужно было перечислить все измененные файлы между двумя коммитами. Поэтому я использовал эту (также * 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

Ответ 7

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

git show --stat (hash)

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

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

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

Ответ 8

Я использую измененный псевдоним довольно часто. Чтобы настроить его:

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

Ответ 9

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

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

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

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

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

Ответ 10

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

git log --name-status

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

Ответ 11

$ git log 88ee8^..88ee8 --name-only --pretty="format:"

Ответ 12

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

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

Итак, вы можете сделать git diff, за которым следует --name-only, с двумя хэшами фиксации после <sha0> <sha1>, что-то вроде ниже:

git diff --name-only 5f12f15 kag9f02 

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

git diff -name-only 5f12f15 kag9f02

Ответ 13

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

git diff --name-status <SHA1> <SHA2> | cut -f2

Ответ 14

Мне нравится использовать

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

Ответ 15

git show --name-only commitCodeHere

Ответ 16

Здесь также 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
...

Я знаю, что этот ответ действительно не соответствует "без посторонней информации". Но я все же считаю, что этот список более полезен, а только имена файлов.

Ответ 17

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

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

Ответ 18

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

git diff HEAD~1 --name-only

Ответ 19

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

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 прочитайте эту статью

https://devhints.io/git-log-format

https://devhints.io/git-log

Ответ 20

Отобразить журнал.

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

git log COMMIT -1 --name-only

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

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

Ответ 21

Перечислите файлы, которые были изменены в фиксации:

git diff --name-only SHA1^ SHA1

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

Ответ 22

Нашел прекрасный ответ на этот вопрос:

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

Чтобы я мог знать

which files were just modified M

Which files were newly added , A

Which files were deleted , D

Ответ 23

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

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

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

Ответ 24

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

git show 9d3a52c474:

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

git show 9d3a52c474:someDir/someOtherDir

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

git show 9d3a52c474:someDir/someOtherDir/somefile

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

Ответ 25

git show [email protected]{0}

отлично работает для меня

Ответ 26

Если вы используете плагин oh-my-zsh и git, ярлык glg будет полезен.

Ответ 27

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

λ 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

Ответ 28

Я думал, что поделился бы сводкой моего псевдонима. Также я нахожу использование "zsh" отличным с git, он цветно отображает все красиво и говорит, что вы хотите, чтобы ветка все время менялась в командной строке.

Для тех, кто покрывает SVN, вы найдете это полезным: (это сочетание идей из разных потоков, я только беру кредит на знание, как использовать copy/paste)

.gitconfig:
        ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status

>>git ls
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| 
| A     icds.xcodeproj/project.pbxproj
| A     icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
| A     icds/AppDelegate.m
| A     icds/Assets.xcassets/AppIcon.appiconset/Contents.json

* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| 
| D     Classes/AppInfoViewControler.h
| D     Classes/AppInfoViewControler.m
| D     Classes/CurveInstrument.h


.gitconfig: 
       lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>>git lt
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker
* 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker
* 7373b5e - clean up files from old version (11 hours ago) Jim Zucker
* 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker


.gitconfig
lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>> git lt

commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c
Author: Jim Zucker <[email protected]>
Date:   Tue Dec 1 22:23:10 2015 -0800

    New Files from xcode 7

A       icds.xcodeproj/project.pbxproj
A       icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata


commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d
Author: Jim Zucker <[email protected]>
Date:   Tue Dec 1 22:17:00 2015 -0800

    Move everything to old

D       Classes/AppInfoViewControler.h
D       Classes/AppInfoViewControler.m
D       Classes/CurveInstrument.h
D       Classes/CurveInstrument.m

Ответ 29

Это должно работать:

git status

Это покажет, что не организовано и что поставлено.