Wie finde ich den Commit, in dem eine bestimmte Datei hinzugefügt wurde?
Lesezeit: 4 Minuten
Zombo
Angenommen, ich habe eine Datei foo.js das wurde vor einiger Zeit begangen. Ich möchte einfach den Commit finden, wo diese Datei zuerst hinzugefügt wurde.
Nach dem Lesen der Antworten und meinem eigenen Basteln funktioniert das für mich
Das ist besser als alle Antworten, da es umbenannte Dateien nachverfolgt.
– Rainer Rillke
5. Juni 2021 um 17:18 Uhr
Denken Sie, dass es einige Grenzfälle gibt, in denen dies mehr als ein Ergebnis zurückgeben kann, z. B. wenn eine Datei hinzugefügt und anschließend gelöscht und in einem anderen Commit (dh nicht umbenannt) erneut hinzugefügt wird. Seth Robinsons Antwort scheint diese Fälle zu behandeln.
– Steve Kammern
24. August 2021 um 12:45 Uhr
Aus Interesse, wie hast du dich für 40% entschieden --find-renames? Scheint ganz gut für mich zu funktionieren und habe einige davon abgeholt --follow allein nicht, nur neugierig …
– Steve Kammern
24. August 2021 um 15:06 Uhr
stelterd
Hier ist eine einfachere, “reine Git”-Methode, ohne dass eine Pipeline erforderlich ist:
git log --diff-filter=A -- foo.js
Überprüfen Sie die Dokumentation. Sie können dasselbe für Gelöscht, Geändert usw. tun.
Der untere Einzeiler durchsucht rekursiv Unterverzeichnisse der $PWD zum foo.js ohne einen absoluten oder relativen Pfad zur Datei angeben zu müssen, noch muss sich die Datei im selben Verzeichnis wie die befinden $PWD
git log --diff-filter=A -- **foo.js
+1! Meine Datei befand sich jedoch in einem Unterordner, sodass sie nur funktionierte, nachdem ich vorne ein Sternchen hinzugefügt hatte git log --diff-filter=A -- *subfolder/foo.js
– Geo
16. August 2013 um 17:40 Uhr
Wie funktioniert dies bei Dateien, die aus anderen Zweigen zusammengeführt wurden, die aber nicht unbedingt von dem Benutzer, der die Zusammenführung durchführt, zu dem Zweig hinzugefügt wurden, der zusammengeführt wird?
– Benutzer67416
22. Januar 2014 um 18:47 Uhr
Ja, sie haben die Ankerstruktur in den Dokumenten geändert. Aktualisiert, danke!
– stelterd
20. März 2019 um 20:55 Uhr
@geo Ich glaube, ich verstehe, was du sagst, aber nicht wirklich, aber ich habe einen ähnlichen Anwendungsfall, bei dem ich im Allgemeinen im Projektstamm eines Git-Verzeichnisses bleibe und von dort Befehle ausgebe und den mitgelieferten Einzeiler verwende git log --diff-filter=A -- foo.js habe die Commit-ID / den Hash nicht in STDOUT in meinem Terminal gedruckt, sondern ich musste den relativen Pfad zur Datei aus dem Git-Repo-Root angeben, um die gewünschten Ergebnisse zu erhalten
– Ipatch
11. Dezember 2019 um 20:08 Uhr
Sehr schön, Sie wissen, dass Sie das setzen können -- auch im Alias, damit Sie schreiben können git whatadded foo.js?
Die akzeptierte Lösung hat bei mir nicht funktioniert, aber diese hat es getan. Vielen Dank!
– Stevie Howard
16. Oktober 2019 um 15:55 Uhr
Ich habe die Antwort so bearbeitet, dass sie beide enthält --follow und --find-renames=40% Es folgt also Dateiumbenennungen und findet den ursprünglichen Autor – hoffe, das ist in Ordnung?
– Steve Kammern
24. August 2021 um 14:14 Uhr
Reid
Folgendes ist vielleicht nicht von Interesse, aber ich denke, es wird Ihnen in Zukunft helfen und ist Teil des Debugging-Ökosystems in Git:
Die Option -L beschränkt die Ausgabe der Anmerkung auf die Zeilen 174 bis 190, sodass Sie die Autoren und den Commit-Hash usw. von Zeile 174 bis 190 für die Datei xx.py sehen
Könnten Sie bitte erklären, was jeder der Operanden tut? Mir ist klar, dass Sie einen Link zum relevanten RTFM bereitgestellt haben, aber eine kleine Erläuterung würde Ihren Beitrag zu einem One-Stop-Shop machen.
– rossmcm
6. Februar 2017 um 22:25 Uhr
Wie das Pro-Git-Buch sagt Wenn Sie einen Fehler in Ihrem Code aufspüren und wissen möchten, wann er eingeführt wurde und warum, ist Dateiannotation oft Ihr bestes Werkzeug. Es zeigt Ihnen, welches Commit als letztes jede Zeile einer beliebigen Datei geändert hat, also verwendet dieses Beispiel, das ich gezeigt habe, die Option -L, um die Ausgabe auf die Zeilen 174 bis 190 zu beschränken, und das Letzte, was nur die Zieldatei ist, die Sie überprüfen möchten ( xx.py), in diesem Fall eine Python-Datei @rossmcm
– Reide
23. Februar 2017 um 16:46 Uhr
Wenn es eine Alternative ist, dies nicht programmgesteuert zu tun, geht dies sehr schnell. Öffnen Sie die gitk-GUI.
gitk file
Scrollen Sie dann einfach zum ersten Commit
10176000cookie-checkWie finde ich den Commit, in dem eine bestimmte Datei hinzugefügt wurde?yes
Das ist besser als alle Antworten, da es umbenannte Dateien nachverfolgt.
– Rainer Rillke
5. Juni 2021 um 17:18 Uhr
Denken Sie, dass es einige Grenzfälle gibt, in denen dies mehr als ein Ergebnis zurückgeben kann, z. B. wenn eine Datei hinzugefügt und anschließend gelöscht und in einem anderen Commit (dh nicht umbenannt) erneut hinzugefügt wird. Seth Robinsons Antwort scheint diese Fälle zu behandeln.
– Steve Kammern
24. August 2021 um 12:45 Uhr
Aus Interesse, wie hast du dich für 40% entschieden
--find-renames
? Scheint ganz gut für mich zu funktionieren und habe einige davon abgeholt--follow
allein nicht, nur neugierig …– Steve Kammern
24. August 2021 um 15:06 Uhr