Так я предпочитаю:
class Klass(object):
@staticmethod
def stat_func():
return 42
_ANS = stat_func.__func__()
def method(self):
return self.__class__.stat_func() + self.__class__._ANS
Я предпочитаю это решение есть новый Klass.stat_func
из-за принципа DRY . Напоминает мне о причине , почему в Python 3:) super()
Например, с функцией @staticmethod
рекурсия может выглядеть не очень хорошо (вам нужно будет нарушить принцип DRY, вызвав Klass.stat_func
внутри Klass.stat_func
). Это потому, что у вас нет ссылки на self
внутри статического метода. С функцией уровня модуля все будет выглядеть нормально.
Предпочтительный путь (потому что это команда plumbing , предназначенная для программирования):
$ 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 status
Это покажет, что не организовано и что поставлено.
Используйте простую команду из одной строки, если вы просто хотите, чтобы список файлов был изменен в последнем коммите:
git diff HEAD~1 --name-only
ОК, есть несколько способов показать все файлы в конкретном коммите ...
Чтобы уменьшить информацию и показать только имена файлов, которые были сделаны, вы можете просто добавить --name-only
или --name-status
flag ..., эти флажки просто показывают вам имена файлов, которые отличаются от предыдущих коммитов, как вы хотите ...
Итак, вы можете сделать git diff
, а затем --name-only
, с двумя хэш после <sha0> <sha1>
, что-то вроде ниже:
git diff --name-only 5f12f15 kag9f02
Я также создаю изображение ниже, чтобы показать все шаги, которые нужно пройти в этой ситуации:
Использовать
git log --name-status
Это покажет вам идентификатор, сообщение, файлы, измененные и измененные, созданные, добавленные или удаленные. В некоторой степени команда «все-в-одном».
Я просто предполагаю, что gitk
нежелательно для этого. В этом случае попробуйте git show --name-only <sha>
.
gitk
- это именно то, что я получил после - спасибо. этот вопрос теперь является первым, что появляется в поиске Google, поэтому стоит знать, что существует gitk
! Остальные могут поддерживать вашу командную строку; Я просто посмотрю на этот приятный экран пользовательского интерфейса :)
– Mr Spoon
3 November 2016 в 11:06
gitk
на самом деле является достойным способом просмотра файлов и отображения файла, в котором работает diff. например Код, проверяющий монстра на одноранговое соединение.
– Elijah Lynn
27 October 2017 в 21:56
Нашел прекрасный ответ на это:
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 log --name-only
, и вы можете просматривать различные коммиты, фиксировать сообщения и измененные файлы.
Введите q, чтобы вернуть свое приглашение.
Если вы хотите получить список измененных файлов:
git diff-tree --no-commit-id --name-only -r <commit-ish>
Если вы хотите получить список всех файлов в фиксации, вы можете использовать
git ls-tree --name-only -r <commit-ish>
--no-commit-id
, чтобы избежать печати SHA1, например: git diff-tree --no-commit-id --name-only -r <commit-ish>
– John Mellor
15 August 2012 в 21:00
-r
/ -t
, не так ли? Поскольку diff-дерево обрабатывает как измененные, так и добавленные файлы. Если вы хотите перечислить все новые (добавленные) файлы, используйте git diff-tree -r --name-only --no-commit-id --diff-filter=A <commit-ish>
– Jakub Narębski
18 November 2015 в 00:15
Я думал, что поделился бы сводкой моего псевдонима. Также я нахожу использование «zsh» великолепно, git it colora все хорошо красит и говорит, что вы хотите, чтобы ветка все время менялась в командной строке.
Для тех, кто покрывает 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
Также есть 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
...
Я знаю, что этот ответ на самом деле match "без посторонней информации.", но я все же считаю, что этот список более полезен, а только имена файлов.
whatchanged
вместо подачи параметров.
– Gabrielius
25 January 2016 в 13:19
Недавно мне нужно было перечислить все измененные файлы между двумя коммитами. Таким образом, я использовал эту (также * 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 diff --name-status START_COMMIT..END_COMMIT
, вам не нужен трейлинг |sort | uniq
.
– Ethan
17 September 2013 в 21:12
git diff --name-only START_COMMIT..END_COMMIT
– Ethan
17 September 2013 в 21:19
git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'
. Мне нужен список изменений кода только для огромного PR, который добавил тысячи PNG и XML-макетов.
– AutonomousApps
18 September 2017 в 16:39
Я лично использую комбинацию --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
alias gits='git show --stat --oneline'
, тогда gits
сам по себе показывает последние изменения (в HEAD), а gits b24f5fb
можно использовать для отображения изменений в ревизии.
– Brent Faust
5 December 2013 в 05:03
git config --global alias.changes 'show --stat --oneline'
. Затем вы можете ввести git changes
(с необязательным commit-ish) и получить вывод из первых приведенных выше примеров.
– lindes
5 December 2013 в 19:31
git config --global alias.changes "show --stat --oneline"
– Alchemistmatt
25 July 2017 в 02:46
git show
также работает для просмотра спрятанных изменений: например. git show --stat --oneline stash@{1}
– Jeff Ward
26 July 2017 в 19:00
Мне нравится использовать
git show --stat <SHA1>^..<SHA2>
Список файлов, которые были изменены в commit:
git diff --name-only SHA1^ SHA1
Это не показывает сообщения журнала, дополнительные строки новой строки или любые другие помехи. Это работает для любой фиксации, а не только для текущей. Не знаю, почему еще не было довольно , поэтому я добавляю его.
git diff SHA1^ SHA1
и git show SHA1
.
– Vladimir Vukanac
27 June 2016 в 15:16
git show
также показывает сообщение фиксации
– Newtonx
27 June 2016 в 23:01
$ git log 88ee8^..88ee8 --name-only --pretty="format:"
Мне это нравится:
git diff --name-status <SHA1> <SHA1>^
A
& amp; D
(добавлять и удалять) статусы файлов назад, потому что он показывает diff от указанной фиксации к предыдущей фиксации, а не наоборот. Это должно быть git diff --name-status <SHA1>^ <SHA1>
.
– Troy Gizzi
3 January 2015 в 06:14
Существует простой трюк для просмотра в виде списка файлов, просто добавьте :
после хэша.
git show 9d3a52c474:
Затем вы можете просверлить
git show 9d3a52c474:someDir/someOtherDir
Если вы ударите файл, вы получите исходную версию файла; который иногда является тем, что вам нужно, если вы ищете только хорошую ссылку или ключевые фрагменты кода (diff могут сделать все беспорядок),
git show 9d3a52c474:someDir/someOtherDir/somefile
Единственным недостатком этого метода является то, что он не " t легко показать дерево файлов.
Я использую измененный псевдоним довольно часто. Чтобы установить его:
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 --name-status <SHA1> <SHA2> | cut -f2
git diff --name-status .. | grep ^[^D] | cut -f2
– Pierre-Adrien Buisson
17 September 2014 в 10:19
Простейшая форма:
git show --stat (hash)
Это легче запомнить, и она предоставит вам всю необходимую вам информацию.
Если вы действительно хотите только имена файлов, вы можете добавить опцию --name-only
.
git show --stat --name-only (hash)
Использование стандартной команды git diff (также хорошо для сценариев):
git diff --name-only <sha>^ <sha>
Если вы хотите также статус измененных файлов:
git diff --name-status <sha>^ <sha>
Это хорошо работает с слияния.
git show --name-only <sha>
– thebugfinder
10 September 2015 в 12:57
git diff-tree --no-commit-id --name-only -r <commit>
– drizzt 11 January 2013 в 17:18diff-tree
не работает при просмотре корневой фиксации. – jbranchaud 6 March 2013 в 07:52--name-only
на--name-status
даст более четкое резюме. – Kurt Zhong 11 April 2013 в 04:58git log --name-only -n 1 <hash>
Последняя фиксация будет:git log --name-only -n 1 HEAD~1..HEAD
– Kurt 11 November 2013 в 06:20