J'ai simplement couru git push -f
par erreur, écrasant ainsi une branche distante.
Original:
(remote origin:)
branch master -> commit aaaaaaa
branch foo -> commit bbbbbbb
(local)
branch master -> commit ccccccc
branch foo -> commit ddddddd
Après git push -f
:
(remote origin:)
branch master -> commit ccccccc
branch foo -> commit ddddddd
Dans mon référentiel local, je travaille sur la master
branche, je peux donc restaurer la branche master
à valider aaaaaaa
, car je peux obtenir la validation à aaaaaaa
partir de git reflog
. Cependant, je n'ai pas pu m'engager bbbbbbb
parce que je n'avais pas tiré avant git push -f
.
J'ai essayé git reflog
dans le référentiel distant, mais il n'y a rien d'utile dans reflog dans le référentiel nu.
Comment restaurer la branche foo
pour la valider bbbbbbb
dans le référentiel distant?
(PS, je ne connais pas la valeur réelle de bbbbbbb
.)
git
file-recovery
Xiè Jìléi
la source
la source
Réponses:
Essaye ça:
Connectez-vous à la télécommande via SSH.
Effectuez une sauvegarde de l'ensemble du référentiel distant.
Si vous connaissez au moins les premiers caractères de
bbbbbbb
, utilisezgit show bbbbbb
et / ougit log bbbbbb
pour découvrir le hachage de validation complet. (Si vous n'avez besoin que du hachage,git rev-parse bbbbbb
cela fonctionnera également, mais il est toujours préférable de vérifier.)Si vous ne connaissez pas la valeur du tout , courir
git fsck
et vous devriez obtenir une liste de « ballants commits ». Examinez chaque validation à l'aide degit show <hash>
etgit log <hash>
jusqu'à ce que vous trouviez la bonne.Mettez à jour les références de branche:
Utilisez
git log master
etgit log foo
pour vous assurer que vous avez restauré les branches correctes.la source
git fsck
.Il est probable que d'autres services en fournissent également. C'est un épargnant de jour.
la source