Wenn ich also eine Datei mit dem Namen foo.rb habe und eine Fehlermeldung für eine fehlende Methode namens bar angezeigt wird, möchte ich den Verlauf von foo.rb nach der Zeichenfolge durchsuchen, um festzustellenbar
, ob sie jemals in der Vergangenheit definiert wurde.
Ich habe diese Suche im gesamten Git-Verlauf nach einer Zeichenfolge gefunden.
Dies durchsucht jedoch alle Dateien. Ich möchte nur in einer Datei suchen.
-- filename
eine Reihe von Git-Befehlen anhängen , wenn Sie sie auf eine Datei beschränken möchten.Antworten:
Zu diesem Zweck können Sie die Option -S verwenden, um das Protokoll zu erstellen:
quelle
git log -G'bar' -- foo.rb
um nach Diff zu suchen, das 'bar' enthält, anstatt nach Commits, die die Anzahl der Vorkommen von 'bar' geändert haben (siehe git-log-Manpage).-Sbar
es verwenden, um nach Balken zu suchen . Vielleicht hat es etwas damit zu tun, dass ich die Windows-Befehlszeile benutze.-G
ist für eine Regex-Suche ... dies ist auch eine großartige Referenz: stackoverflow.com/a/4472267/2586761Oder vielleicht können Sie es versuchen (aus verwandten Fragen Durchsuchen Sie den gesamten Git-Verlauf nach Zeichenfolgen )
Es wird tatsächlich nach Dateiinhalten gesucht und keine Nachrichten / Patches für das Auftreten von Balken festgeschrieben.
quelle
for /F %i in ('git rev-list --all foo.rb') git grep -F bar %i foo.rb
(for /F %i in ('git rev-list --all foo.rb') do git grep -F bar %i foo.rb
(Es gibt eine Überschreibung für den Befehl git log (aus dem Handbuch ):
Sie könnten also verwenden:
quelle
--full-diff
funktioniert anscheinend nicht (wie in, kein Diff wird gezeigt) ohne-p
, zumindest auf Git 1.7.9.5Ich habe verwendet,
git log -S "string" --follow -p "path of file"
was den vollständigen Verlauf aller Änderungen mit dieser Zeichenfolge zeigt.quelle