2012-10-10 14 views
5

Ich möchte etwas Code zurück, den ich in einigen Commits vor einiger Zeit gelöscht habe. Ich erinnere mich nicht, was der Code überhaupt war, aber ich erinnerte mich, dass es etwas sehr nützliches getan hat, aber ich habe es gelöscht, weil ich dachte, ich würde es nicht brauchen. Allerdings brauche ich jetzt diesen Code zurück, aber ich erinnere mich nur an welche Funktion es war.git: gelöschten Inhalt finden; Ich kenne nur umgebenden Kontext

Weitere Informationen: Die Datei, die diese Funktion enthält auch 500 Zeilen Code insgesamt. Es gibt einen Bereich von 30 Commits, von dem ich weiß, dass der Code an einem Punkt erschien.

Diese Frage ist ein High-Level-Problem. Wie kann ich die Informationen verwenden, die ich kenne, um die gewünschten Informationen zu erhalten?

+3

Wurde Ihr Problem gelöst?Wenn ja, wäre es schön, wenn du eine der Antworten annehmen könntest, wenn sie hilfreich ist oder deine eigenen zur Verfügung stellen, damit andere Leute von dem Wissen profitieren können, danke! –

Antwort

0

Wenn Sie die Funktionsnamen erinnern können, oder anderes signifikantes Wort oder eine Variable, dann können Sie versuchen, git grep

git grep <regexp> $(git rev-list <rev1>..<rev2>) 

Wo rev1 und rev2 die Grenzen des Bereichs zu begehen sind. Es wird den gesamten Commit-Inhalt (einschließlich Löschen) grep, so dass Sie sicherlich Ihren Code finden werden.

Weitere Details finden How to grep (search) committed code in the git history?

+0

Aus was ich verstehe, wird dies alle Codezeilen ausgeben, die den Funktionsnamen enthalten? Wenn das so ist, will ich diese Zeilen nicht, ich will die _near_ es. Der gelöschte Code befindet sich jedoch nicht am Anfang des Funktionsnamens, damit der Funktionsname in den diffs erscheint. Auch die Funktion selbst ist in jedem Commit enthalten. Das hilft mir leider nicht. - Es sei denn, ich missverstand etwas –

+0

, so dass Sie den Funktionsnamen haben, es existiert noch, und Sie suchen nach Code in der Nähe, richtig? dann weißt du, in welcher Datei gesucht werden soll; Klingt wie 'git Schuld 'wird die Arbeit tun – CharlesB

1

Verwendung git Schuld mit

--reverse 

Weg Geschichte vorwärts statt rückwärts. Anstatt die Revision anzuzeigen, in der eine Zeile angezeigt wurde, wird die letzte Revision angezeigt, in der eine Zeile existiert hat. Dies erfordert eine Reihe von Überarbeitungen wie START..END, wo der Pfad, den man beschuldigen soll, in START existiert.

oder versuchen, mit git zu spielen binärer Suche in dem 30 Commits, das finden bisect zu tun, wo der Code von Interesse

3
  1. Die beste erscheint Sie ist mit Suchbegriffen tun. Wenn Sie einen Funktionsnamen kennen

    git log -Sfunction 
    

    wäre perfekt.

  2. Wenn Sie ein Muster haben Sie suchen können in jedem Commit der Änderungen:

    git log --grep=pattern 
    

    Will Liste dieses Muster Commits enthält. Fügen Sie -i für die Groß-/Kleinschreibung hinzu. In --regex für regulären Ausdruck

  3. Ansonsten

    git log -p FIRST...LAST | less 
    

    geben Ihnen vollen Text. Sie könnten suchen, oder einfach nur bewegen und visuell scannen ...


Oh. PS. Da Sie es nennen eine lange Funktion ist, könnten Sie tun nur

git log --stat FIRST...LAST 

Und für Dateien mit vielen Deletionen() in den diff Statistiken sehen.

+1

' git log -S' arbeitete gut für mich in einer ähnlichen Situation. Ich musste den Code sehen, der in einer Ruby-Klasse war, die vor einiger Zeit gelöscht wurde, und das brachte mich dazu. Genial! :) –

Verwandte Themen