1070 votes

Comment rechercher un dépôt Git par message de commit ?

J'ai enregistré un code source dans GIT avec le message de validation "Build 0051".

Cependant, je n'arrive plus à trouver ce code source - comment extraire cette source du dépôt GIT, en utilisant la ligne de commande ?

Mise à jour

  1. Vérifié dans les versions 0043, 0044, 0045 et 0046 en utilisant SmartGIT.
  2. J'ai enlevé la version 0043, et j'ai ajouté les versions jusqu'à 0051 sur une autre branche.
  3. J'ai encore vérifié le 0043.
  4. Maintenant, 0051 a disparu.

Mise à jour

Le code source est bien là, il s'agit maintenant de le vérifier :

C:\Source>git log -g --grep="0052"
commit 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
Reflog: HEAD@{10} (unknown <Mike@.(none)>)
Reflog message: commit: 20110819 - 1724 - GL: Intermediate version. File version:  v0.5.0 build 0052.
Author: unknown <Mike@.(none)>
Date:   Fri Aug 19 17:24:51 2011 +0100

    20110819 - 1724 - GL: Intermediate version. File version: v0.5.0 build 0052.

C:\Source>

2 votes

1 votes

0 votes

1621voto

shelhamer Points 4327

Pour rechercher dans le journal des livraisons (dans toutes les branches) le texte donné :

git log --all --grep='Build 0051'

Pour rechercher le contenu réel des commits dans l'historique d'un repo, utilisez :

git grep 'Build 0051' $(git rev-list --all)

pour afficher toutes les instances du texte donné, le nom du fichier qui le contient, et le commit sha1.

Enfin, en dernier recours, au cas où votre commit se balancerait et ne serait pas du tout connecté à l'historique, vous pouvez rechercher le reflog lui-même avec la commande -g (abréviation de --walk-reflogs :

git log -g --grep='Build 0051'

EDIT : si vous semblez avoir perdu votre historique, vérifiez la page reflog comme votre filet de sécurité. Cherchez la Build 0051 dans l'un des commits listés par

git reflog

Vous avez peut-être simplement défini votre HEAD à une partie de l'histoire dans laquelle le commit 'Build 0051' n'est pas visible, ou vous l'avez peut-être même soufflé. Le site git-ready reflog Cet article peut vous être utile.

Pour récupérer votre commit à partir du reflog : faire un checkout git du commit que vous avez trouvé (et optionnellement faire une nouvelle branche ou un tag de celui-ci pour référence)

git checkout 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
# alternative, using reflog (see git-ready link provided)
# git checkout HEAD@{10}
git checkout -b build_0051 # make a new branch with the build_0051 as the tip

3 votes

Avec git grep 'Build 0051' $(git rev-list --all) j'obtiens sh.exe" : /bin/git : Le mauvais numéro de fichier a peut-être changé la façon de faire ?

8 votes

Git log -i -grep

0 votes

@JensSchauder Si vous rencontrez une erreur avec git grep 'search' $(git rev-list --all) essayez. git rev-list --all | xargs git grep 'search'

107voto

Alex Howansky Points 16820

J'ai mis ça dans mon ~/.gitconfig :

[alias]
    find = log --pretty=\"format:%Cgreen%H %Cblue%s\" --name-status --grep

Je peux alors taper "git find string" et j'obtiens une liste de tous les commits contenant cette chaîne dans le message. Par exemple, pour trouver tous les commits faisant référence au ticket #33 :

029a641667d6d92e16deccae7ebdeef792d8336b Added isAttachmentEditable() and isAttachmentViewable() methods. (references #33)
M       library/Dbs/Db/Row/Login.php

a1bccdcd29ed29573d2fb799e2a564b5419af2e2 Add permissions checks for attachments of custom strategies. (references #33).
M       application/controllers/AttachmentController.php

38c8db557e5ec0963a7292aef0220ad1088f518d Fix permissions. (references #33)
M       application/views/scripts/attachment/_row.phtml

041db110859e7259caeffd3fed7a3d7b18a3d564 Fix permissions. (references #33)
M       application/views/scripts/attachment/index.phtml

388df3b4faae50f8a8d8beb85750dd0aa67736ed Added getStrategy() method. (references #33)
M       library/Dbs/Db/Row/Attachment.php

2 votes

Joli, mais il manque peut-être une remise à zéro des couleurs ? --pretty=\"format:%Cgreen%H %Cblue%s%Creset\"

10 votes

Je préfère imprimer l'intégralité du message git (grep peut se produire là, pas dans le titre), donc j'ai fini avec : find = log --all --pretty=\"format:%Cgreen%H %Cblue%s\n%b%Creset\" --name-status --grep . Notez le --all y %b chars. Thx @AshleyCoolman pour la reset conseil.

11 votes

Merci. J'ai trouvé l'alias très utile. Je n'aimais pas la coloration et j'ai trouvé le format oneline parfait pour cela. L'ajout de -i pour ne pas tenir compte des majuscules et des minuscules s'est avéré utile. find = log --oneline --name-status -i --grep

31voto

Noufal Ibrahim Points 32200
git log --grep="Build 0051"

devrait faire l'affaire

1 votes

Il faut utiliser des guillemets doubles (") au lieu de guillemets simples (').

29voto

Josh Lee Points 53741
git log --grep=<pattern>
            Limit the commits output to ones with log message that matches the
            specified pattern (regular expression).

0 votes

Meilleure suggestion !

16voto

Nic Points 4705

Essayez ça !

git log | grep -b3 "Build 0051"

0 votes

Merci - mais il ne le trouve pas. Comment puis-je effectuer une recherche dans toutes les branches possibles ?

7 votes

Vous voulez utiliser git grep au lieu du grep normal, et fournir l'option --all pour rechercher plusieurs branches.

0 votes

Hmm - est-ce que les autres réponses le trouvent aussi ? Si ce n'est pas le cas, vous avez peut-être un problème plus important. J'essaierais git log --all --grep='Build 0051' (réponse de @shelhamer)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X