wake-up-neo.com

Wie durchsuche ich ein Git-Repository per Commit-Nachricht?

Ich habe Quellcode mit der Commit-Meldung "Build 0051" in GIT eingecheckt.

Ich kann diesen Quellcode jedoch nicht mehr finden. Wie extrahiere ich diesen Quellcode über die Befehlszeile aus dem GIT-Repository?

pdate

  1. Eingecheckt in den Versionen 0043, 0044, 0045 und 0046 mit SmartGIT.
  2. 0043 ausgecheckt und Versionen bis 0051 in einem anderen Zweig eingecheckt.
  3. 0043 wieder ausgecheckt.
  4. Jetzt ist 0051 verschwunden.

pdate

Der Quellcode ist definitiv da, jetzt ist es eine Frage des Auscheckens:

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

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

C:\Source>
721
Contango

So durchsuchen Sie das Festschreibungsprotokoll (über alle Zweige hinweg) nach dem angegebenen Text:

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

Verwenden Sie zum Durchsuchen des tatsächlichen Inhalts von Commits im Verlauf eines Repos Folgendes:

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

um alle Instanzen des angegebenen Textes, des enthaltenen Dateinamens und des Commits sha1 anzuzeigen.

Als letzten Ausweg, falls Ihr Commit baumelt und überhaupt nicht mit der Geschichte verbunden ist, können Sie das Reflog selbst mit dem Flag -g durchsuchen (kurz für --walk-reflogs):

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

BEARBEITEN: Wenn Sie scheinen, Ihre Geschichte verloren zu haben, überprüfen Sie das reflog als Ihr Sicherheitsnetz. Suchen Sie nach Build 0051 in einem der Commits von

git reflog

Möglicherweise haben Sie HEAD einfach auf einen Teil des Verlaufs festgelegt, in dem das Commit "Build 0051" nicht sichtbar ist, oder Sie haben es tatsächlich weggeblasen. Der git-ready reflog Artikel kann hilfreich sein.

Um Ihr Commit aus dem Reflog wiederherzustellen : Machen Sie eine Git-Prüfung des gefundenen Commits (und erstellen Sie optional einen neuen Zweig oder ein neues Tag davon als Referenz).

git checkout 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
# alternative, using reflog (see git-ready link provided)
# git checkout [email protected]{10}
git checkout -b build_0051 # make a new branch with the build_0051 as the tip
1119
shelhamer

Ich füge dies in meine ~/.gitconfig ein:

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

Dann kann ich "git find string" eingeben und bekomme eine Liste aller Commits, die diesen String in der Nachricht enthalten. So finden Sie beispielsweise alle Commits, die auf Ticket Nr. 33 verweisen:

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
72
Alex Howansky

Obwohl es etwas zu spät ist, gibt es :/, die dedizierte Notation, um ein Commit (oder eine Revision) auf der Grundlage der Commit-Nachricht anzugeben. Stellen Sie der Suchzeichenfolge einfach :/ voran, z.

git show :/message

Hier kann <message> ein komplexes Regex-Muster sein, das aus Leerzeichen besteht. Stellen Sie daher bitte sicher, dass Sie bei Bedarf Anführungszeichen setzen/Escape-Zeichen setzen, z.

git log -1 -p ":/a few words"

Alternativ kann ein Startpunkt angegeben werden, um das nächste Commit zu finden, das von einem bestimmten Punkt aus erreichbar ist, z.

git show 'HEAD^{/fix nasty bug}'

Siehe: git revisions manual .

26
ryenus
git log --grep=<pattern>
            Limit the commits output to ones with log message that matches the
            specified pattern (regular expression).
20
Josh Lee
git log --grep="Build 0051"

sollte den Trick machen

15
Noufal Ibrahim

Versuche dies!

git log | grep -b3 "Build 0051"
8
Nic

verwenden Sie zuerst git log --oneline, um das SHA des Commits (Message) zu finden, und verwenden Sie dann git log --stat 8zad24d mit dem SHA (das erste Paar ist ein Beispiel (8zad24d) )) um die richtigen Infos zu finden

3
Rida