J'ai trouvé un moyen de trouver le commit spécifique, mais il n'est affiché que lors de la différence entre ces commits. Je ne peux pas expliquer pourquoi Git fonctionne de cette façon, mais je vais expliquer mes conclusions:
Problème expliqué
Avec '-S' ou '-G', nous ne pouvons trouver que où il a été ajouté, pas supprimé. Pour illustrer:
$ git log --format="%H" -S"127.0.124.1"
857aa361293abbb351d6d6becaa55ec011aebc93
$ git show 857aa361293abbb351d6d6becaa55ec011aebc93 | grep "127.0.124.1" # Supprimer grep pour voir la diff complète
+ return "127.0.124.1", nil
Étape par étape
J'ai eu l'idée de miku86 sur dev.to. Tout d'abord, nous essayons de trouver le dernier commit où notre chaîne existait :
$ git --no-pager grep "127.0.124.1" $(git rev-list --all) # | head -n1 | cut -d: -f1 # Décommentez pour afficher uniquement le hash du premier
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"
Cela donne ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b
est notre commit recherché. Ensuite, nous essayons de trouver le commit suivant après celui-ci jusqu'à HEAD :
$ git rev-list ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b.. # | tail -n1 # Décommentez pour afficher le dernier
[...]
c82d040f7be2f8955075655843400a36ceb75303
aa0568b543db57564770d73e736aaf50fd749fb4
dde61dae0cf648e7f4dd8a5c194bcf9be1745793
Ce qui est dde61dae0cf648e7f4dd8a5c194bcf9be1745793
, puisque c'est le dernier dans cette liste que nous cherchons.
Cela signifie que dde61dae0cf648e7f4dd8a5c194bcf9be1745793
devrait contenir cette suppression ?
$ git show dde61dae0cf648e7f4dd8a5c194bcf9be1745793 | grep "127.0.124.1" # Supprimer grep pour voir la diff complète
#
Non ?!? Eh bien, quelle est la diff alors de cela à notre premier commit trouvé ?
$ git diff ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b..dde61dae0cf648e7f4dd8a5c194bcf9be1745793 | grep "127.0.124.1" # Supprimer grep pour voir la diff complète
- return "127.0.124.1"
Ici nous l'avons trouvé. C'est étrange. Mais puisque nous utilisons une différence entre des commits, ai-je fait une erreur et y a-t-il d'autres commits entre les deux ?
$ git log --pretty=oneline ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b..dde61dae0cf648e7f4dd8a5c194bcf9be1745793
dde61dae0cf648e7f4dd8a5c194bcf9be1745793 réseau interface
Non, il semble que nous n'ayons pas commis d'erreur. C'est étrange. Mais oui, c'est jusqu'où je suis arrivé pour trouver l'endroit spécifique du changement où la chaîne a disparu.
De plus
J'ai pu confirmer en utilisant git bisect
que dde61dae0cf648e7f4dd8a5c194bcf9be1745793
est le commit que je cherchais.
# En effectuant un bissage...
$ git bisect mauvais
dde61dae0cf648e7f4dd8a5c194bcf9be1745793 est le premier mauvais commit
commit dde61dae0cf648e7f4dd8a5c194bcf9be1745793
Auteur : ...
Date : ven. 18 oct. 2019 11:04:26 +0200
interface réseau
:100644 100644 242e81c363c2c7069efb018821821553b98f2c97 416c27f5351a9d92a6914b34846c6de51d83dd0d M go.mod
:040000 040000 715c3ab5b3f4579d8054618f1e11fc05fb425324 e6731408a1ac1ff0428128ccbb1fbfaad4c789ab M network
[...]