Ich möchte das letzte Commit finden, das eine Quelldatei geändert hat.
Ich kann git blame
alle Daten für Commits in jeder Zeile anzeigen, aber es ist schwierig, genau zu erkennen, welches Commit das letzte war, das die Datei berührt hat.
Wie kann ich das letzte Commit finden, das eine bestimmte Datei in meinem Git-Repository berührt hat?
--all
Option hinzufügen .Wenn Sie nur das aktuellste Commit suchen möchten
git-log
, möchten Sie nichtgit-rev-list
, sondern die Commit-Objekte, die diese Datei ändern, in diesem Commit-Pfad auflisten, beginnend mit dem neuesten (chronologisch). Einfach gesagt:git rev-list -1 <commit> <filename>
Denn
git-rev-list
in Ihrem Fall liefern Sie nur:Dies gibt nur die letzte Festschreibungs-ID im aktuellen Zweig zurück, um diese Datei zu ändern, z.
215095e2e338525be0baeeebdf66bfbb304e7270
Für ein komplexeres Beispiel können Sie Tag-Namen und sogar Remote-Referenzen verwenden und relative Pfadnamen mit Platzhaltern einschließen, z.
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
... Was Ihnen sagen würde, was die letzte Änderung am Wildcard-Match in der Geschichte dieses Zweigs war. Die Optionen für die Rev-Liste sind extrem. Dies ist einer der wichtigsten Installationsbefehle, sodass Sie nach nahezu allen erdenklichen Kriterien ein- oder ausschließen können.
Natürlich beziehen sich auf die git-rev-Liste (1) Handbuch Seite .
quelle
git-log
minderwertig ist.git-log
ist Porzellan,git-rev-list
ist Sanitär.Wenn Sie nur den Hash des neuesten Commits abrufen möchten, um einen bestimmten Satz von Dateien zu ändern (und dies vermeiden möchten
awk
), können Sie Folgendes verwenden:Dies kann nützlich sein, um den Commit-Hash für die spätere Verwendung mit zu erhalten
git describe
.Zum Beispiel (falls es für jemanden nützlich ist)…
Ich erstelle eine aktuelle Versions-ID, indem ich das letzte Commit zum Ändern einer Quelldatei berücksichtige (vorausgesetzt, Sie markieren Versionen mit Tags wie
mycode-1.2.1
):Dies erzeugt IDs wie:
mycode-1.2.1
- wenn der aktuelle Status der Quelldateien einer getaggten Version entsprichtmycode-1.2.1-g3k7s2
- wenn der aktuelle Status der Quelldateien dem Festschreiben nach einer getaggten Version entsprichtmycode-1.2.1-g3k7s2-mod
- wenn der aktuelle Status der Quelldateien seit dem letzten Commit nach einer getaggten Version geändert wurdemycode-unknown
- wenn noch kein Versions-Tag erstellt wurdequelle
$VN
sieht aus wie eine Art Albtraum untoter SVNIch bin nicht sicher, ob dies das ist, was Sie wollen, aber ob Sie a tun
git log <thefile>
, um die Commits zu erhalten, die diese Datei geändert haben. Sie können die oberste auswählen. Es sollte derjenige sein, den Sie suchen.quelle
git log -n1 -- <thefile>
die Ausgabe verwenden (oder weiterleiten,head -1
wenn Sie Ressourcen verschwenden möchten), müssen Sie die oberste Zeile nicht manuell auswählen (siehe Jo Liss ' Antwort )-n
und-1
direkt verwenden.Versuchen Sie Folgendes, um nur den Schiedsrichter in einer Zeile zu erhalten:
quelle
Sobald Sie die SHA-ID des Commits haben, das Sie verwenden möchten
git log FILENAME
, sollten Sie in der Lage sein,git show SHA_ID_HERE
zu sehen, was Sie für dieses bestimmte Commit getan haben. Sie müssen nicht einmal die gesamte ID eingeben. Die ersten 6 Zeichen sollten ausreichen.quelle
git show $(git log -1 --pretty="%H" -- FILENAME)