2017-09-20 2 views
0

Y a-t-il un moyen de faire correspondre git grep seulement les fichiers que j'ai engagés?Comment faire «git grep» seulement dans les fichiers que j'ai commis?

Le but est de grep dans le contenu du fichier, pas le message de journal.

+0

Définir les "fichiers que j'ai engagés": fichiers que personne d'autre n'a jamais modifiés? Des fichiers modifiés à tout moment par l'un de vos commits? Des fichiers où le dernier commit les a touchés? Autre chose? –

+0

La condition de 'git log --committer = ' est très bien. – EquipDev

Répondre

3

Si vous voulez grep dans le diff d'un commit, vous devriez probablement utiliser git log -G ou git log -S:

git log -p --author="your name" -G pattern 

Les deux -G et -S recherchera le motif dans la diff introduite par un commit,
la différence est (git help log):

Pour illustrer la différence entre -S<regex> --pickaxe-regex et -G<regex>, envisager un engagement avec les éléments suivants diff dans le même fichier:

+ return !regexec(regexp, two->ptr, 1, &regmatch, 0); 
... 
- hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0); 

Alors que git log -G"regexec\(regexp" montrera ce commit, git log -S"regexec\(regexp" --pickaxe-regex pas (Beca utilisez le nombre d'occurrences de cette chaîne n'a pas changé).

Lorsque vous utilisez -p conjointement avec -G ou -S, seuls les fichiers correspondant au motif sera affiché.

+0

Le but était de grep dans le contenu du fichier, pas le message de journal. J'ai mis à jour la question pour clarifier cela. – EquipDev

+0

@EquipDev: c'est exactement ce que '-G' et' -S' font: ils grep dans le * content * du commit, pas dans son message – LeGEC

+0

Merci, je n'étais pas au courant de -G et -S; encore apprendre Git :-) Génial que la commande git peut le faire avec des options, au lieu d'avoir à ajouter des tuyaux, car cela fonctionne aussi sur Windows. – EquipDev

3
author="your name" 

git log --pretty="%H" --author="$author" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq |xargs grep -i "String to grep" 

ou une version plus courte:

author="your name" 
git log --no-merges --author="$author" --name-only --pretty=format:"" | sort -u |xargs grep -i <string> 

Orignal answer utilisé pour obtenir les fichiers d'un utilisateur particulier

+0

Le but était de grep dans le contenu du fichier, pas le message du journal. J'ai mis à jour la question pour clarifier cela. – EquipDev

+0

@EquipDev cela va en effet grep à partir du contenu des fichiers commis par l'auteur pas le journal. –