
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
git log --follow --diff-filter=A --find-renames=40% foo.js

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.
https://git-scm.com/docs/git-log#Documentation/git-log.txt—diff-filterACDMRTUXB82308203
Ich habe dafür einen praktischen Alias, weil ich ihn immer vergesse:
git config --global alias.whatadded 'log --diff-filter=A'
Das macht es so einfach wie:
git whatadded -- foo.js
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

Seth Robertson
git log --follow --find-renames=40% --oneline -- foo.js | tail -n 1

Reid
Folgendes ist vielleicht nicht von Interesse, aber ich denke, es wird Ihnen in Zukunft helfen und ist Teil des Debugging-Ökosystems in Git:
Sie können verwenden git-blame
um anzuzeigen, welche Revision und welcher Autor jede Zeile einer Datei zuletzt geändert hat, insbesondere eine Dateianmerkung. Besuch https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git
Zum Beispiel,
git blame -L 174,190 xx.py
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
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