Comment puis-je récupérer un faux git push -f origine de maître?
J'ai juste commis le mal à la source de mon projet à l'aide de --force
option.
Est-il possible de revenir? Je comprends que toutes les précédentes branches ont été écrasés à l'aide de -f
option, donc j'ai peut-être foiré mes révisions précédentes.
double possible de Est-il de toute façon à annuler la commande git push -f?
OriginalL'auteur mrdavenz | 2010-10-20
Vous devez vous connecter pour publier un commentaire.
Généralement, Git ne rien jeter, mais la récupération de ce qui peut encore être délicat.
Si vous avez la bonne source, alors vous pourriez tout simplement la pousser dans la distance avec le
--force
option. Git de ne pas avoir supprimé toutes les branches, sauf si vous lui avez dit. Si vous avez effectivement perdu s'engage alors jetez un oeil à ce guide utile à la récupération s'engage. Si vous connaissez le SHA-1 de les commits que vous voulez, alors vous êtes probablement OK.Meilleure chose à faire: tout sauvegarder et de voir ce qui est toujours dans votre dépôt local. Faire de même sur la télécommande si possible. Utilisation
git fsck
pour voir si vous pouvez récupérer des choses, et par-dessus tout NE PAS exécutergit gc
.Ci-dessus par-dessus tout, ne jamais utiliser la
--force
option à moins que vous vraiment, vraiment.git reflog show remotes/origin/master
. Vous devriez être en mesure de voir vos push là; l'engagement dans la ligne précédente est l'endroit où il était avant tout fait foiré. Vous pouvez ensuite il suffit de pousser cette révision (avec--force
) à l'origine, et être de retour où vous avez été!Oh. Vous n'avez pas mentionné dans votre question que vous n'avez pas le repo. (Bien sûr, ceci est quelque chose que vous voulez jamais faire.) Si vous avez accès au système de fichiers où vous avez poussé, cependant, vous pouvez toujours faire tout cela.
Aïe. Toujours bon d'avoir votre répertoire en cours dans le cadre de votre prompte pour éviter ce genre de chose.
Je pense que ce que vous avez dit il y a le réel de l'anwer: Même avec une vieille version (n'ayant pas
git fetch
ed pour un long temps), vous pouvez afficher le reflog de GitHub et le récupérer!Où est cette réponse par @Jefromi? Je ne vois pas ce que l'utilisateur mentionné sur cette page, en dehors de ce fil de commentaires.
OriginalL'auteur Cameron Skinner
Si vous connaissez la validation de hachage, c'est facile, il suffit de recréer votre branche.
Supprimer la branche distante:
puis recréer votre branche avec les commandes suivantes:
Exactement ce que je cherchais.
Genius. Cette juste m'a sauvé beaucoup de travail
OriginalL'auteur user1094125
La solution est déjà mentionné ici
Oui, et
git reflog show remotes/origin/master
si git reflog est nécessaire (comme mentionné par @Cascabel ci-dessus)OriginalL'auteur Abdelhafid
Si vous n'êtes pas que les pensions où l'forcé de pousser provient, à l'origine et/niveau master, il n'y a aucun moyen de les récupérer. Mais si vous êtes de la chance suffit d'utiliser GitHub ou GitHub pour l'Entreprise, vous pouvez avoir un coup d'oeil à la RESTE API et récupérer des perdus de s'engager en tant qu'patch, exemple:
Incroyable liens. Merci!
OriginalL'auteur Pierrick HYMBERT
J'ai fait la même chose alors que l'annulation d'une dernière poussée pour un seul fichier. Fini par aller retour à l'état d'origine du référentiel. J'ai été en utilisant les commandes git de Linus comme j'ai eu la copie locale sur Linux. Heureusement que la copie était encore intacte.
Que je n'ai fait (après frénétiquement à faire quelques copies de la locale repo):
(il dit que origin/master était en avance par 68 s'engage, fine ... ce sont tous les changements que j'ai supprimé)
Et tout a été restauré à la façon dont elle était avant que je ne énergique poussée.
La chose la plus importante à retenir est de ne jamais faire un git checkout . après vous a vigoureusement poussé. Mais la meilleure pratique consiste à désactiver l'option d'émission. Je ne suis jamais à l'utiliser de nouveau. Appris ma leçon!!
OriginalL'auteur Pran
Une autre façon de compenser la perte de commettre ou même de comprendre ce qui s'engage ont été perdus, si la précédente poussée n'est pas venu à partir de votre repo, est de regarder votre de CI de la machine.
Si vous avez un emploi qui teste la branche master après chaque commit (ou série consécutive de commits), que vous devriez avoir, vous pouvez avoir un coup d'oeil ce qu'il était en essais dernier. C'est le commit que vous devez restaurer.
L'IC de la machine peut même garder un clone local de l'opération, à partir de laquelle vous pouvez être en mesure d'effectuer cette récupération.
Source: probablement Continue de Livraison: Logiciel Fiable par le biais de Communiqués de construction, de Test, de Déploiement et d'Automatisation (Addison-Wesley de la Série Signature (Fowler))
OriginalL'auteur user7610
Ici vous pouvez lire les décisions https://evilmartians.com/chronicles/git-push---force-and-how-to-deal-with-it
Le second m'a aidé.
J'ai fait de mal ces commandes
Après ces commandes, j'ai perdu trois s'engage. Pour les récupérer, j'ai regardé à la borne où je n'ai tort "git pull" et y ont vu la sortie comme
60223bf...0b258eb quelques-branche -> origine/quelques-branche
Le second hachage 0b258eb était exactement ce dont j'avais besoin. Donc, j'ai pris cette hachage et de produire de commande
OriginalL'auteur Andrey