Как перечислить все файлы в коммит?
Я ищу простой git
команда, которая предоставляет хорошо отформатированный список всех файлов, которые были частью фиксации, заданной хэшем (SHA1), без посторонней информации.
Я пробовал:
git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
хотя в нем перечислены файлы, он также включает в себя ненужную информацию diff для каждого.
есть еще git
команда, которая предоставит только список, который я хочу, чтобы я мог избежать разбора его из git show
выход?
26 ответов
Предпочтительный Способ (потому что это сантехники command; предназначен для программирования):
$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js
Еще Один Способ (менее предпочтительно для скриптов, потому что это фарфор command; предназначен для пользователя)
$ git show --pretty="" --name-only bd61ad98
index.html
javascript/application.js
javascript/ie6.js
- на
--no-commit-id
подавляет вывод идентификатора фиксации. - на
--pretty
аргумент указывает пустую строку формата, чтобы избежать cruft на начало. - на
Если вы хотите получить список измененных файлов:
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 С --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)
это легче запомнить, и это даст вам всю необходимую информацию.
Если вы действительно хотите только имена файлов, вы могли бы добавить .
git show --stat --name-only (hash)
Я использую изменить псевдоним a довольно часто. Чтобы настроить его:
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 --name-status
Это покажет вам идентификатор фиксации, сообщение, измененные файлы и был ли он изменен, создан, добавлен или удален. Что-то вроде команды "все-в-одном".
ОК есть несколько способов, чтобы показать все файлы в определенной фиксации...
для уменьшения информации и показать только имена из файлов, которые совершили, вы просто можете добавить --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 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
...
Я знаю, что этот ответ не соответствует действительности "без посторонней информации.", но я все еще думаю, что этот список более полезен, чем просто имена файлов.
используйте простую команду one line, если вы просто хотите, чтобы список файлов изменился в последнем коммите:
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
если вы нажмете файл, вы получите сырую версию файла; что иногда является тем, что вы хотите, если вы ищете только хорошую ссылку или ключевые фрагменты кода (различия могут сделать все беспорядок),
git show 9d3a52c474:someDir/someOtherDir/somefile
единственным недостатком этого метода является то, что он легко не показать дерево файлов.
Я думал, что поделюсь резюме моего псевдонима.. также я нахожу использование " 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 <jim@stratengllc.com>
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 <jim@stratengllc.com>
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