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



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



Я пробовал:



git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d


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



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

539   26  

26 ответов:

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

$ 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

  • The --no-commit-id подавляет вывод идентификатора фиксации.
  • The --pretty аргумент указывает пустую строку формата, чтобы избежать Крафт на начало.
  • The

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

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 С показать:

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) команду

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)

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

Если вы действительно хотите только имена файлов, вы могли бы добавить .

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>

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

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

использовать

git log --name-status

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

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

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

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

git diff --name-only 5f12f15 kag9f02 

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

git diff --name-only 5f12f15 kag9f02

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

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

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

git show --stat <SHA1>^..<SHA2>
git show --name-only commitCodeHere

Я такой:

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

там же 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 diff HEAD~1 --name-only

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

git diff --name-only SHA1^ SHA1

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

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

фиксация может быть пустой ( "" ) или SHA-1 или SHA-1 укорочен.

git log COMMIT -1 --name-only

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

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

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

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 show --stat "(спасибо Райан) и несколько команд sed должны обрезать данные для вас:

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

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

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

git show 9d3a52c474:

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

git show 9d3a52c474:someDir/someOtherDir

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

git show 9d3a52c474:someDir/someOtherDir/somefile

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

git show HEAD@{0}

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

Я думал, что поделюсь резюме моего псевдонима.. также я нахожу использование " zsh " отличным с помощью Git IT Chroma keys все красиво и говорит, что вы хотите, чтобы ветка была все время, изменяя командную строку.

для тех, кто покрывает из 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

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

git status

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

Comments

    Ничего не найдено.