Ich habe Ihre Frage gefunden, als ich selbst verrückt geworden bin, und bisher war keine Antwort ausreichend. Ich habe einen Weg gefunden, um das spezifische Commit zu finden, aber es wird nur angezeigt, wenn zwischen diesen Commits unterschieden wird. Ich kann nicht erklären, warum Git so funktioniert, aber ich werde meine Ergebnisse näher erläutern:
Problem erklärt
Mit '-S' oder '-G' können wir nur finden, wo es hinzugefügt und nicht entfernt wurde. Um näher darauf einzugehen:
$ git log --format="%H" -S"127.0.124.1"
857aa361293abbb351d6d6becaa55ec011aebc93
$ git show 857aa361293abbb351d6d6becaa55ec011aebc93 | grep "127.0.124.1"
+ return "127.0.124.1", nil
Schritt für Schritt
Ich habe die Idee von miku86 auf dev.to . Zuerst versuchen wir, das letzte Commit zu finden, bei dem unsere Zeichenfolge vorhanden war:
$ git --no-pager grep "127.0.124.1" $(git rev-list --all)
ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b:some/file.go: return "127.0.124.1"
0d19a98d6434da0b4b5cc2bac190b9b1de36d992:some/file.go: return "127.0.124.1"
84274c5712bacbbee1dca5567cef77a2b6f356d2:some/file.go: return "127.0.124.1"
42e692643ff8a5dce7a89e985062b3d38c60fcc0:some/file.go: return "127.0.124.1"
Das Ergebnis ba0b2d348f4e33857c96acf5a6231cf9d89ddb1bist unser gesuchtes Commit. Als nächstes versuchen wir, das folgende Commit bis HEAD zu finden:
$ git rev-list ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b..
[...]
c82d040f7be2f8955075655843400a36ceb75303
aa0568b543db57564770d73e736aaf50fd749fb4
dde61dae0cf648e7f4dd8a5c194bcf9be1745793
Das ist dde61dae0cf648e7f4dd8a5c194bcf9be1745793, da dies der letzte in dieser Liste ist, den wir suchen.
Das heißt also, dde61dae0cf648e7f4dd8a5c194bcf9be1745793sollte diese Entfernung enthalten sein?
$ git show dde61dae0cf648e7f4dd8a5c194bcf9be1745793 | grep "127.0.124.1"
Nein?!? Nun, was ist dann der Unterschied zu unserem ersten gefundenen Commit?
$ git diff ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b..dde61dae0cf648e7f4dd8a5c194bcf9be1745793 | grep "127.0.124.1"
- return "127.0.124.1"
Hier haben wir es gefunden. Das ist seltsam. Aber da wir einen Unterschied zwischen Commits verwenden, habe ich einen Fehler gemacht und es gibt andere Commits dazwischen?
$ git log --pretty=oneline ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b..dde61dae0cf648e7f4dd8a5c194bcf9be1745793
dde61dae0cf648e7f4dd8a5c194bcf9be1745793 network interface
Nein, wir scheinen keinen Fehler gemacht zu haben. Das ist seltsam. Aber ja, so weit bin ich gekommen, um die Stelle zu finden, an der die Saite verschwunden ist.
zusätzlich
Ich kann bestätigen, git bisectdass dies dde61dae0cf648e7f4dd8a5c194bcf9be1745793das Commit ist, nach dem ich gesucht habe.
$ git bisect bad
dde61dae0cf648e7f4dd8a5c194bcf9be1745793 is the first bad commit
commit dde61dae0cf648e7f4dd8a5c194bcf9be1745793
Author: ...
Date: Fri Oct 18 11:04:26 2019 +0200
network interface
:100644 100644 242e81c363c2c7069efb018821821553b98f2c97 416c27f5351a9d92a6914b34846c6de51d83dd0d M go.mod
:040000 040000 715c3ab5b3f4579d8054618f1e11fc05fb425324 e6731408a1ac1ff0428128ccbb1fbfaad4c789ab M network
[...]
log, sollte es inshow... sichtbar sein, oder? Oder vielleicht verstehe ich die Frage falsch.