git

Git: Trouver un code distant

Il me rend fou.

Comment trouver un code qui a été supprimé?

En fin de compte, j'ai trouvé où il a été créé avec ceci:


$ git log --pretty=oneline -S'some code'


Et c'est assez bon, mais j'étais aussi curieux de savoir où il a été supprimé et toujours pas d'os.

Au début j'ai essayé
git diff HEAD..HEAD^|grep 'some code'

, Chaque fois en développant la plage jusqu'à ce que je trouvais la ligne où il a été supprimé. Eh bien, supposons que je l'ai trouvé dans la gamme
HEAD^^..HEAD^^^

, Alors je fais
git show HEAD^^^

et
git show HEAD^^

de
grep

, Mais il n'y a aucun code nulle part!

Puis je lis un peu sur
git bisect

, Et, bien sûr, il me donne la seule modification, où le coupable devrait être ... et encore
git show rev|grep 'some code'

Il s'avère vide ...

- Qu'est-ce que? Qu'est-ce que je fais mal?

Remercier!
Invité:

Catherine

Confirmation de:

Hmm, ça marche pour moi:

$ git init
Initialized empty Git repository in /Users/pknotz/foo/.git/
$ echo "Hello" > a
$ git add a
$ git commit -am "initial commit"
[master /root-commit/ 7e52a51] initial commit
1 files changed, 1 insertions/+/, 0 deletions/-/
create mode 100644 a
$ echo " World" >> a
$ git commit -am "Be more specific"
[master 080e9fe] Be more specific
1 files changed, 1 insertions/+/, 0 deletions/-/
$ echo "Hello" > a
$ git commit -am "Be less specific"
[master 00f3fd0] Be less specific
1 files changed, 0 insertions/+/, 1 deletions/-/
$ cat a
Hello
$ git log -SWorld
commit 00f3fd0134d0d54aafbb9d959666efc5fd492b4f
Author: Pat Notz <patnotz@gmail.com>
Date: Tue Oct 6 17:20:48 2009 -0600
Be less specific
commit 080e9fe84ff89aab9d9d51fb5d8d59e8f663ee7f
Author: Pat Notz <patnotz@gmail.com>
Date: Tue Oct 6 17:20:33 2009 -0600
Be more specific
Ou n'inceptez-vous pas?
</patnotz@gmail.com></patnotz@gmail.com>

David

Confirmation de:

git log -S<string>

fait ce travail, mais si vous devez effectuer des recherches plus complexes, vous pouvez utiliser
git log -G<regex>

.

De
man

:


-G<regex>


Rechercher des différences, le texte du patch dont contient ajouté / Chaînes distantes
C'est une coïncidence
<regex>

.
</regex></regex></regex></string>

Giselle

Confirmation de:

Vous avez trouvé votre question quand il est devenu fou, et jusqu'à présent, il n'y avait pas assez de réponse. J'ai trouvé un moyen de trouver un commit spécifique, mais il est affiché qu'avec la différence entre ces commits. Je ne peux pas expliquer pourquoi git Cela fonctionne de cette façon, mais je vous dirai en détail de mes conclusions:

Le problème est expliqué

Par '- S ' ou '- G ' nous pouvons

trouver seulement l'endroit où il a été ajouté

, Et non supprimé. Clarifier:


$ git log --format="%H" -S"127.0.124.1"
857aa361293abbb351d6d6becaa55ec011aebc93
$ git show 857aa361293abbb351d6d6becaa55ec011aebc93 | grep "127.0.124.1" # remove grep to see full diff
+ return "127.0.124.1", nil


Pas à pas

J'ai eu cette idée de
https://dev.to/miku86/git-find ... -5h33
. Premièrement, nous essayons de trouver le dernier commit, qui existait dans notre rangée:


$ git --no-pager grep "127.0.124.1" $/git rev-list --all/ # | head -n1 | cut -d: -f1 # uncomment to only show the hash of the first one
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 mène à
ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b

- C'est notre commit souhaité. Ensuite, nous essayons de trouver la fier à côté après cela HEAD:


$ git rev-list ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b.. # | tail -n1 # uncomment to only show the last one
[...]
c82d040f7be2f8955075655843400a36ceb75303
aa0568b543db57564770d73e736aaf50fd749fb4
dde61dae0cf648e7f4dd8a5c194bcf9be1745793


il
dde61dae0cf648e7f4dd8a5c194bcf9be1745793

, Comme il s'agit de la dernière dans cette liste, que nous recherchons.

Ça veut dire
dde61dae0cf648e7f4dd8a5c194bcf9be1745793

Devrait contenir cet enlèvement?


$ git show dde61dae0cf648e7f4dd8a5c194bcf9be1745793 | grep "127.0.124.1" # remove grep to see full diff
#<no output="">


Pas?!? Bien, qu'est-ce que c'est diff Puis de ceci à notre premier comité trouvé?


$ git diff ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b..dde61dae0cf648e7f4dd8a5c194bcf9be1745793 | grep "127.0.124.1" # remove grep to see full diff
- return "127.0.124.1"


Donc nous l'avons trouvé. Cela est étrange. Mais depuis que nous utilisons diff Entre comme commits, ai-je fait trompée s'il y a d'autres engagements entre eux?


$ git log --pretty=oneline ba0b2d348f4e33857c96acf5a6231cf9d89ddb1b..dde61dae0cf648e7f4dd8a5c194bcf9be1745793
dde61dae0cf648e7f4dd8a5c194bcf9be1745793 network interface


Non, il semble que nous ne nous trompons pas. Cela est étrange. Mais oui, c'est jusqu'à présent que j'ai déménagé pour trouver un lieu de changement spécifique où la corde a disparu.

aditionellement

Je peux confirmer avec
git bisect

, Quel
dde61dae0cf648e7f4dd8a5c194bcf9be1745793

- Cette comité que je cherchais.


# bisecting a while...
$ 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
[...]


</no>

Pour répondre aux questions, connectez-vous ou registre