Ich habe einen Quellcode in GIT mit der Commit-Nachricht "Build 0051" eingecheckt.
Ich kann diesen Quellcode jedoch nicht mehr finden. Wie extrahiere ich diese Quelle über die Befehlszeile aus dem GIT-Repository?
Aktualisieren
- Eingecheckt in den Versionen 0043, 0044, 0045 und 0046 mit SmartGIT.
- 0043 ausgecheckt und Versionen bis 0051 in einem anderen Zweig eingecheckt.
- 0043 erneut ausgecheckt.
- Jetzt ist 0051 verschwunden.
Aktualisieren
Der Quellcode ist definitiv da, jetzt geht es darum, ihn zu überprüfen:
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>
Antworten:
So durchsuchen Sie das Festschreibungsprotokoll (über alle Zweige hinweg) nach dem angegebenen Text:
Verwenden Sie Folgendes, um den tatsächlichen Inhalt von Commits im Verlauf eines Repos zu durchsuchen:
um alle Instanzen des angegebenen Textes, den enthaltenen Dateinamen und das Commit sha1 anzuzeigen.
Als letztes Mittel, falls Ihr Commit baumelt und überhaupt nicht mit der Geschichte verbunden ist, können Sie das Reflog selbst mit der
-g
Flagge durchsuchen (kurz für--walk-reflogs
:BEARBEITEN: Wenn Sie Ihre Geschichte verloren zu haben scheinen, überprüfen Sie das
reflog
als Ihr Sicherheitsnetz. Suchen Sie in einem der von aufgelisteten Commits nach Build 0051Möglicherweise haben Sie einfach
HEAD
einen Teil des Verlaufs festgelegt, in dem das Commit "Build 0051" nicht sichtbar ist, oder Sie haben es tatsächlich weggeblasen. Der git-fähige Reflog- Artikel kann hilfreich sein.So stellen Sie Ihr Commit aus dem Reflog wieder her : Führen Sie eine Git-Prüfung des gefundenen Commits durch (und erstellen Sie optional einen neuen Zweig oder ein neues Tag als Referenz).
quelle
git grep 'search' $(git rev-list --all)
git rev-list --all | xargs git grep 'search'
Ich habe dies in meine ~ / .gitconfig eingefügt:
Dann kann ich "git find string" eingeben und erhalte eine Liste aller Commits, die diesen String in der Nachricht enthalten. So finden Sie beispielsweise alle Commits, die auf Ticket Nr. 33 verweisen:
quelle
--pretty=\"format:%Cgreen%H %Cblue%s%Creset\"
find = log --all --pretty=\"format:%Cgreen%H %Cblue%s\n%b%Creset\" --name-status --grep
. Beachten Sie die--all
und%b
Zeichen. Danke @AshleyCoolman für denreset
Tipp.find = log --oneline --name-status -i --grep
Obwohl es etwas spät ist, gibt es
:/
die dedizierte Notation, um ein Commit (oder eine Revision) basierend auf der Commit-Nachricht anzugeben. Stellen Sie der Suchzeichenfolge einfach Folgendes voran:/
, z.Hier
<message>
kann es sich um ein komplexes Regex-Muster handeln, das aus Leerzeichen besteht. Stellen Sie daher sicher, dass Sie bei Bedarf Anführungszeichen / Escapezeichen angeben, z.Alternativ kann ein Startpunkt angegeben werden, um das nächstgelegene Commit zu finden, das von einem bestimmten Punkt aus erreichbar ist, z.
Siehe: Git-Revisionshandbuch .
quelle
quelle
sollte den Trick machen
quelle
Versuche dies!
quelle
git grep
anstelle von normalem grep verwenden und das--all
Flag zum Durchsuchen mehrerer Zweige bereitstellen .git log --all --grep='Build 0051'
(@ Shelhamers Antwort)git log -g
. Möglicherweise haben Sie beim Zurücksetzen den Verlauf verloren, können das Reflog jedoch weiterhin überprüfen, wenn kein Müll gesammelt wurde.Verwenden
git log --oneline
Sie zuerst die SHA des Commits (Nachricht), danngit log --stat 8zad24d
die SHA (das erste Beispiel für Paare, sha char (8zad24d)), um die richtigen Informationen zu findenquelle
Diese:
oder dieses:
Befehle funktionieren am besten für mich.
quelle
In allen Filialen suchen
Sobald Sie wissen, zu welchem Commit Sie gelangen möchten
quelle
Wenn die Änderung nicht zu alt ist, können Sie Folgendes tun:
git reflog
und dann die Commit-ID auschecken
quelle