Donc, si j'ai un fichier appelé foo.rb et qu'il me donne une erreur pour une méthode manquante appelée bar , je veux donc rechercher dans l'historique de foo.rb la chaîne bar
pour voir si elle a déjà été définie dans le passé.
J'ai trouvé cela Rechercher dans toute l'histoire de Git une chaîne
Mais cela recherche tous les fichiers. Je veux juste rechercher dans un fichier.
-- filename
à un tas de commandes git si vous souhaitez le limiter à un fichier.Réponses:
Pour cela, vous pouvez utiliser l'option -S pour git log:
la source
git log -G'bar' -- foo.rb
pour rechercher un diff qui contient 'bar' plutôt que des commits qui ont changé le nombre d'occurrences de 'bar' (voir la page de manuel git-log).-Sbar
pour rechercher une barre . Peut-être que cela a quelque chose à voir avec moi en utilisant la ligne de commande Windows.-G
c'est pour une recherche regex ... c'est aussi une excellente référence: stackoverflow.com/a/4472267/2586761Ou peut-être que vous pouvez essayer celui-ci (à partir de questions connexes Rechercher dans tout l'historique de git pour la chaîne )
Il recherchera en fait le contenu du fichier et ne validera pas les messages / correctifs pour toute occurrence de bar.
la source
for /F %i in ('git rev-list --all foo.rb') git grep -F bar %i foo.rb
(surveillez les doubles guillemets si le nom de fichier ou la phrase de recherche contient des espaces)for /F %i in ('git rev-list --all foo.rb') do git grep -F bar %i foo.rb
(surveillez les guillemets si le nom de fichier ou la phrase de recherche contient des espaces)Il y a un remplacement pour la commande git log (à partir du manuel ):
Vous pouvez donc utiliser:
la source
--full-diff
ne fonctionne apparemment pas (comme dans, aucun diff n'est montré) sans-p
, au moins sur git 1.7.9.5J'ai utilisé
git log -S "string" --follow -p "path of file"
ce qui montre l'historique complet de tous les changements avec cette chaîne.la source