Git recherche une chaîne dans un historique de fichiers unique

Donc, si j'ai un fichier appelé foo.rb et il me donne une erreur pour un manque de méthode appelée bar, donc je recherche l'histoire de foo.rb pour la chaîne bar pour voir si elle a jamais été définie dans le passé.

J'ai trouvé cette Recherche toute l'histoire de Git pour une chaîne?

Mais cela recherche tous les fichiers. Je veux juste chercher dans un fichier.

110
git
demandé sur Community 2012-04-18 22:00:25

3 réponses

À cette fin, vous pouvez utiliser l'option-s pour git log:

git log -S'bar' -- foo.rb
159
répondu ralphtheninja 2012-04-18 18:55:53

Ou peut-être que vous pouvez essayer celui-ci (à partir de questions connexesrechercher toute l'histoire de git pour la chaîne)

git rev-list --all foo.rb | (
    while read revision; do
        git grep -F 'bar' $revision foo.rb
    done
)

Il recherchera réellement le contenu du fichier et ne validera pas les messages / correctifs pour toute occurrence de bar.

12
répondu Antoine Pelisse 2017-05-23 11:47:14

Il y a une substitution pour la commande git log (à partir de manual):

$ git log Makefile      # commits that modify Makefile

Vous pouvez donc utiliser:

git log foo.rb | grep "bar"
1
répondu Dmitry Reznik 2012-04-18 18:16:21