В Git, как я могу искать файл или каталог по пути по нескольким веткам?
Я написал что-то в ветке, но не помню какой. Теперь мне нужно найти это.
Уточнение : я ищу файл, который я создал в одной из моих веток. Я хотел бы найти его по пути, а не по его содержимому, поскольку я не помню, что это за содержимое.
Ответы:
git log
+git branch
найдет это для вас:Поддерживает Globbing тоже:
Одиночные кавычки необходимы (по крайней мере, если используется оболочка Bash), поэтому оболочка передает шаблон glob неизменному git, а не расширяет его (как в Unix
find
).источник
somefile
: если вам нужен регулярный поиск по пути / имени файла, например, тогда вы можете использовать ответ ididak.git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
. Работал как шарм. git version 1.7.11.1gitk
поддерживает также globbing. Это отличный ответ @webmat! Если вы хотите увидеть, где он был удален / создан / и т.д., вы можете использовать егоgit log --all --stat -- **/my_file.png
таким образом, что вам не нужно будет угадывать, извлекаете ли вы его из коммита, который его удалил.мерзавец-дерево может помочь. Для поиска по всем существующим веткам:
Преимущество этого состоит в том, что вы также можете искать с помощью регулярных выражений имя файла.
источник
git for-each-ref --format="%(refname)" refs/heads
; do» (c) «git ls-tree --name-only» сделает выходной Tidier (d) может быть стоит указать в своем ответе, что это преимущество перед решением Дастина, а именно то, что вам не нужно точно знать имя файла - вы можете искать по регулярному выражению, совпадающему с любой частью путиrefs/remotes
вместоrefs/heads
. Чтобы искать все (локальные филиалы, удаленное отслеживание веток и теги), просто используйтеrefs/
.Хотя отклик ididak довольно крутой, и Handyman5 предоставляет скрипт для его использования, я нашел его немного ограниченным в использовании этого подхода.
Иногда вам нужно искать что-то, что может появиться / исчезнуть со временем, так почему бы не выполнить поиск по всем коммитам? Кроме того, иногда вам нужен подробный ответ, а в других случаях фиксируются только совпадения. Вот две версии этих опций. Поместите эти сценарии на свой путь:
ГИТ-находка-файл
ГИТ-находка-файлы многословных
Теперь вы можете сделать
Обратите внимание, что с помощью getopt вы можете изменить этот скрипт, чтобы чередовать поиск по всем коммитам, ссылкам, ссылкам / заголовкам, многословности и т. Д.
Проверьте https://github.com/albfan/git-find-file для возможной реализации.
источник
Вы можете использовать
gitk --all
и искать коммиты "трогательные пути" и интересующий вас путь.источник
Скопируйте и вставьте это, чтобы использовать
git find-file SEARCHPATTERN
Печать всех найденных веток:
Печатайте только ветки с результатами:
Эти команды добавят некоторые минимальные скрипты прямо в
~/.gitconfig
качестве глобального мерзавца псевдонима .источник
Достойную реализацию
find
команды для репозиториев Git можно найти здесь:https://github.com/mirabilos/git-find
источник