Em um repositório de código Git, quero listar todos os commits que contêm uma determinada palavra. Eu tentei isso
git log -p | grep --context=4 "word"
mas não necessariamente devolve o nome do arquivo (a menos que esteja a menos de 5 linhas da palavra que eu procurei. Também tentei
git grep "word"
mas me fornece apenas os arquivos presentes e não o histórico.
Como pesquiso o histórico inteiro para poder acompanhar as alterações em uma palavra específica? Pretendo pesquisar na minha base de código por ocorrências de palavras para rastrear alterações (pesquisar no histórico de arquivos).
Respostas:
Se você deseja encontrar todos os commits nos quais a mensagem de commit contém uma determinada palavra, use
Se você deseja encontrar todos os commits em que "word" foi adicionada ou removida no conteúdo do arquivo (para ser mais exato: onde o número de ocorrências de "word" foi alterado), ou seja, pesquise o conteúdo de commit , use a chamada 'picareta' com
No git moderno também há
procurar diferenças cuja linha adicionada ou removida corresponda à "palavra" (também confirmar o conteúdo ).
Observe que,
-G
por padrão, aceita uma regex, enquanto-S
aceita uma string, mas pode ser modificado para aceitar regexes usando o--pickaxe-regex
.Com o Git 2.25.1 (fevereiro de 2020), a documentação é esclarecida em torno dessas regexes.
Veja commit 9299f84 (06 fev 2020) por Martin Ågren (``) .
(Mesclado por Junio C Hamano -
gitster
- na confirmação 0d11410 , 12 de fevereiro de 2020)A
git diff
documentação agora inclui:fonte
-S<string>
Procure diferenças que introduzam ou removem uma instância de <string>.-G<string>
Procure diferenças cuja linha adicionada ou removida corresponda ao <regex> fornecido.-S<string>
é mais rápido, porque só verifica se o número de ocorrências foi<string>
alterado, enquanto as-G<string>
pesquisas adicionaram e removeram a linha em todas as diferenças de confirmação.git log --grep="my words"
,.--grep
é diferente de-S
e-G
. Você pode citar a string para cada um desses argumentos.git log
A picareta de encontrará confirmações com alterações, incluindo "palavra" comgit log -Sword
fonte
Após muita experimentação, posso recomendar o seguinte, que mostra confirmações que introduzem ou removem linhas que contêm um determinado regexp e exibe as alterações de texto em cada uma, com cores mostrando as palavras adicionadas e removidas.
Demora um pouco para correr embora ... ;-)
fonte
GIT_PAGER=cat
ou anexá-lo com| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
Você pode tentar o seguinte comando:
ou usando
grep
da seguinte maneira:Execute este comando no diretório pai no qual você deseja pesquisar.
fonte
git log --patch --color=always | less +/searching_string
.Mais uma maneira / sintaxe para fazer isso é:
git log -S "word"
Assim, você pode pesquisar por exemplo
git log -S "with whitespaces and stuff @/#ü !"
fonte
O vim-fugitivo é versátil para esse tipo de exame no Vim.
Use
:Ggrep
para fazer isso. Para obter mais informações, você pode instalar o vim-fugitive e procurar o turorial por:help Grep
. E este episódio: explorar a história de um repositório git o guiará a fazer tudo isso.fonte
Para usar o conector booleano na expressão regular:
Essa expressão regular procura pela expressão regular [0-9] * ou [az] * nas mensagens de confirmação.
fonte
Se você deseja pesquisar dados confidenciais para removê-los do seu histórico do git (que é a razão pela qual eu cheguei aqui), existem ferramentas para isso. Github como uma página de ajuda dedicada para esse problema .
Aqui está a essência do artigo:
fonte