1578 votes

Puis-je récupérer la branche après la suppression du dépôt git?

Si j'exécute git branch -d XYZ pour supprimer la branche 'XYZ', est-il un moyen de récupérer la branche. En d'autres termes, est-il un moyen de revenir en arrière, comme si je n'avais pas exécuter la direction de la commande supprimer?

2868voto

tfe Points 5789

Oui, vous devriez être en mesure de le faire git reflog et de trouver le SHA1 pour l'engager à la pointe de votre supprimés de la branche, puis juste git checkout [sha]. Et une fois que vous êtes à ce commit, vous pouvez juste git checkout -b [branchname] faire une de recréer de la branche à partir de là.

291voto

Philippe Points 1067

Si vos commits ne sont pas dans votre reflog (peut-être parce supprimé par un outil 3ème partie qui n'écrivent pas dans le reflog), j'ai réussi à récupérer une branche à zéro par ma branche pour le sha de la validation trouvé à l'aide d'une commande comme ça (il crée un fichier avec tous les balançant s'engage):

git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

Vous pouvez également faire un alias de la commande...

16voto

Jakub Narębski Points 87537

L'ajout de tfe réponse: il y a aussi git-ressurect.sh script dans l' contrib/ zone de sources git (git.dépôt git), ce qui pourrait vous aider.

10voto

fabiopagoti Points 343

De ma compréhension, si la branche à supprimé peut être atteint par une autre branche, vous pouvez supprimer en toute sécurité à l'aide de

git branch -d [branch]

et votre travail n'est pas perdu. Rappelez-vous qu'une succursale n'est pas un cliché, mais un pointeur vers un. Ainsi, lorsque vous supprimez une branche de supprimer un pointeur.

Vous n'aurez même pas perdre le travail si vous supprimez une branche qui ne peut être atteint par un autre. Bien sûr, il ne sera pas aussi facile que de vérifier la validation de hachage, mais vous pouvez faire encore. C'est pourquoi git incapable de supprimer une branche qui ne peut être atteint par:- d. Au lieu de cela, vous devez utiliser

git branch -D [branch]

Cette est une partie d'un doit regarder la vidéo de Scott Chacon sur Git. Vérifier la minute 58:00 quand il parle de branches et comment les supprimer.

Introduction à Git Scott Chacon de GitHub

9voto

Robert Knight Points 809

Si vous n'avez pas de reflog, par exemple. parce que vous travaillez dans un dépôt nu qui n'a pas le reflog activé et la validation que vous souhaitez récupérer a été créé récemment, une autre option est de trouver récemment créé commettre des objets et de regarder à travers eux.

De l'intérieur de l' .git/objects annuaire exécuter:

find . -ctime -12h -type f | sed 's/[./]//g' | git cat-file --batch-check | grep commit

Cette recherche tous les objets (s'engage, fichiers, balises,...) créé dans les 12 dernières heures et les filtres pour afficher uniquement les commet. La vérification de ces est alors un processus rapide.

Je voudrais essayer le git-ressurect.sh script mentionné dans Jakub réponse tout d'abord.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X