No Git, como eu poderia procurar um arquivo ou diretório por caminho em vários ramos?
Escrevi algo em um ramo, mas não me lembro qual deles. Agora eu preciso encontrá-lo.
Esclarecimento : Estou procurando um arquivo que criei em um dos meus ramos. Gostaria de encontrá-lo pelo caminho, e não pelo seu conteúdo, pois não me lembro qual é o conteúdo.
Respostas:
git log
+git branch
encontrará para você:Também suporta globbing:
As aspas simples são necessárias (pelo menos se estiver usando o shell Bash) para que o shell passe o padrão glob para o git inalterado, em vez de expandi-lo (como no Unix
find
).fonte
somefile
: se precisar de pesquisa regex sobre o caminho / nome do arquivo, por exemplo, poderá usar a resposta do ididak.git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
. Funcionou como um encanto. git versão 1.7.11.1gitk
suporta o globbing. Essa é uma excelente resposta @webmat! Se você quiser ver onde foi excluído / criado / etc, pode usargit log --all --stat -- **/my_file.png
, dessa forma, não precisará adivinhar se está fazendo o check-out de um commit que o excluiu.git ls-tree pode ajudar. Para pesquisar em todas as ramificações existentes:
A vantagem disso é que você também pode procurar com expressões regulares o nome do arquivo.
fonte
git for-each-ref --format="%(refname)" refs/heads
; do" (c) "git ls-tree - name-only" tornará a saída mais organizada (d) pode valer a pena ressaltar em sua resposta que há uma vantagem disso sobre a solução de Dustin, a saber, que você não precisa saber exatamente o nome do arquivo - é possível pesquisar por expressão regular que corresponde a qualquer parte do caminhorefs/remotes
vez derefs/heads
. Para pesquisar tudo (ramificações locais, ramificações de rastreamento remoto e tags), basta usarrefs/
.Embora a resposta do ididak seja bem legal, e o Handyman5 forneça um script para usá-lo, achei um pouco restrito o uso dessa abordagem.
Às vezes, você precisa procurar algo que possa aparecer / desaparecer ao longo do tempo; então, por que não procurar todos os commits? Além disso, às vezes você precisa de uma resposta detalhada e outras vezes apenas confirma as correspondências. Aqui estão duas versões dessas opções. Coloque estes scripts no seu caminho:
git-find-file
git-find-file-verbose
Agora você pode fazer
Veja que, usando getopt, você pode modificar esse script para pesquisar alternadamente todos os commits, refs, refs / heads, verbos etc.
Confira https://github.com/albfan/git-find-file para uma possível implementação.
fonte
Você pode usar
gitk --all
e procurar confirmações "comoventes" e o nome do caminho em que está interessado.fonte
Copie e cole para usar
git find-file SEARCHPATTERN
Imprimir todas as ramificações pesquisadas:
Imprimir apenas ramificações com resultados:
Esses comandos adicionarão alguns scripts shell mínimos diretamente ao seu alias
~/.gitconfig
como git global .fonte
Uma implementação bastante decente do
find
comando para repositórios Git pode ser encontrada aqui:https://github.com/mirabilos/git-find
fonte