Ich würde empfehlen, drei Werkzeuge in der Git-Toolbox zu betrachten. Die erste ist die Schuld, die in etwa so ist wie in cvs. Es zeigt Ihnen an, welcher Commit zuletzt jede Zeile in einer Datei berührt hat. Wenn Sie sehen wollen, was vorher da war, können Sie das Commit, das die Zeile berührt hat, betrachten und sich das vorherige Commit anschauen.
git show <sha1_of_interesting_commit>^ -- file/path
Sie können die Schuld wiederholen, um zu sehen, was vorher passiert ist.
git blame <sha1_of_interesting_commit>^ -- file/path
Das zweite Werkzeug wird mit --follow
Dateien Vergangenheit umbenennt zu verfolgen.
git log --follow -- file/path
Das dritte - und möglicherweise das nützlichste - Werkzeug ist die Spitzhacke Option zu loggen. Dies durchsucht die Historie nach Änderungen der entfernten, eingeführten oder geänderten Zeilen, die ein bestimmtes Stück Text enthalten. Dies ist besonders nützlich, um Dinge wie Funktionsnamen zu verfolgen. Es kann neu in einer Datei in einem bestimmten Commit sein, aber kam es aus einer anderen Quelldatei? Wurde ein Anruf zur gleichen Zeit hinzugefügt oder bevor er sich bewegte?
git log -S"Interesting_Function"
Wenn Sie einen Patch oder stat-Option verwenden (z -p
oder --stat
) die Ausgabe tatsächlich die Suchkette beteiligt an diesen Dateien, deren Änderungen beschränkt werden, wenn Sie auch --pickaxe-all
verwenden, wo die ganze Änderung angezeigt wird.
Kombiniert mit git grep
, um anzuzeigen, wo alle aktuellen Vorkommen einer Zeichenfolge sind, ist Spitzhacke ein äußerst nützliches History-Mining-Tool.
git Schuld ist nicht gut für die Erkennung von Linienzügen (besonders beim Refactoring des Codes). Ich meine, wenn ein Entwickler die Zeile geschrieben hat, dann hat der nächste Entwickler die Zeile aus irgendeinem Grund nach oben oder unten verschoben - git tackern wird das letztere zeigen. – Eimantas
Ich denke nicht, dass diese Antwort hilfreich ist, weil 1) 'git tmack 'dir nicht sagt, woher ein bestimmter Code stammt - dafür ist' git log' gedacht. 'git blame' sagt dir einfach die letzte Person, die jede existierende Codezeile in der Datei bearbeitet. 2) 'git blame' folgt nicht umbenennen, es sei denn, Sie fügen den Parameter' --follow' hinzu, wie von der akzeptierten Antwort angezeigt (und selbst dann bricht es zusammen, wenn Dateien zusammengeführt, neu strukturiert, usw.). –