2012-12-03 11 views
31

Ist es irgendwie möglich für GIT zu finden, welche Commit eine bestimmte Codezeile in einer bestimmten Datei eingeführt? Dies setzt voraus, dass seit dem Hinzufügen dieser Zeile viele Commits stattgefunden haben. Oder ist das etwas, das in einem Skript getan werden muss, während man die Schuld aller Commits für die Datei, in der die Zeile vorhanden ist, betrachtet?Git Schuld fest Zeile

Um

Original-File- zu klären> Line Added Datei und engagiert -> Viele andere Commits andere Linien Hinzufügen und Ändern der Code

Antwort

29

können Sie git blame -l filename verwenden den SHA1-Zahl zu erhalten, wenn die Linie können Sie

auch verwenden --reverse geändert wurde:

--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.

siehe http://www.kernel.org/pub/software/scm/git/docs/git-blame.html

+0

Das bringt mich in die richtige Richtung. es scheint, dass L ein Argument für die Schuld ist, das es erlauben würde, eine Linie oder einen Bereich von Linien zu verfolgen. Ich werde ein wenig mehr nachforschen und meine Ergebnisse veröffentlichen. –

+0

siehe meine Bearbeitung Sie können Reverse und -L für den Bereich verwenden, dann erhalten Sie das Commit – phschoen

+0

Verwendung von -L fand das Commit an der Spitze. Wenn ich --reverse verwenden würde, würde es mir sicher helfen. Vielen Dank. –

2

Unter der Annahme, dass die Linie, da hat sich nicht verändert es, hinzugefügt wurde dann einfach:

git blame <that file> und dann suchen Sie nach der Linie, nach der Sie suchen.

Wenn die Zeile geändert wurde, seit es hinzugefügt wurde, können Sie immer noch git blame auf das letzte, an dem herausfinden, begehen die Linie geändert wurde, und dann git checkout <sha>~1 (wo sha ist die sha, die im ursprünglichen git blame zeigt nach oben) und git blame wieder zurück in die Geschichte für diese Linie gehen.

+0

Ich habe obige Klarstellung hinzugefügt. Ich möchte es finden, nachdem viele Commits gemacht wurden. Sonst mache ich nur Schuld, wie du gesagt hast. –

+0

Dies scheint nicht so, als würde mir das Commit speziell geben, dass die Linie eingeführt. Eher würde ich git Schuld verwenden müssen, um es selbst zu finden. Ich hatte gehofft, GIT wäre in der Lage, das für mich zu finden. –

+0

Ich kenne keinen anderen Weg, als diese Datei kontinuierlich zu beschuldigen und die Zeile manuell zu finden. Ich glaube nicht, dass Git es automatisch macht. –

0

Es scheint, Sie git log -L-Datei überprüfen verwenden können. Zum Beispiel möchte ich die Commits für file.c, Zeile 55 bis 60 überprüfen:

git log -L55,60:file.c 
2

Sie können die Schuld an dem spezifischen Code Zeichenfolge wie folgt.

git log -S 'THE-CODE'