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?
Réponses
Trop de publicités?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à.
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...
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.
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.
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.