Si je cours git branch -d XYZ
, existe-t-il un moyen de récupérer la branche? Existe-t-il un moyen de revenir en arrière comme si je n'avais pas exécuté la commande delete branch?
git
branch
git-branch
prosseek
la source
la source
Réponses:
Oui, vous devriez pouvoir faire
git reflog
et trouver le SHA1 pour le commit à la pointe de votre branche supprimée, alors justegit checkout [sha]
. Et une fois que vous êtes à ce commit, vous pouvez simplementgit checkout -b [branchname]
recréer la branche à partir de là.Nous remercions @Cascabel pour cette version condensée / monocouche.
Vous pouvez le faire en une seule étape:
la source
git checkout -b <branch> <sha>
.<sha>
. Par exemple, comme mentionné ci-dessus -git checkout -b <branch> <sha>
CMD+K
)git reflog --no-abbrev
pour voir le texte complet<sha>
abrégé par défaut.git checkout remotes/origin/deleted_branch
.La plupart du temps, les validations inaccessibles sont dans le reflog. Donc, la première chose à essayer est de regarder le reflog en utilisant la commande
git reflog
(qui affiche le reflog pourHEAD
).Peut-être quelque chose de plus facile si la validation faisait partie d'une branche spécifique encore existante est d'utiliser la commande
git reflog name-of-my-branch
. Cela fonctionne également avec une télécommande, par exemple si vous avez forcé la poussée (conseil supplémentaire: préférez toujoursgit push --force-with-lease
plutôt que mieux éviter les erreurs et est plus récupérable).Si vos commits ne sont pas dans votre reflog (peut-être parce qu'ils ont été supprimés par un outil tiers qui n'écrit pas dans le reflog), j'ai réussi à récupérer une branche en réinitialisant ma branche au sha du commit trouvé en utilisant une commande comme celle-ci (elle crée un fichier avec toutes les validations pendantes):
Si vous devez l'utiliser plus d'une fois (ou si vous voulez l'enregistrer quelque part), vous pouvez également créer un alias avec cette commande ...
et l'utiliser avec
git rescue
Pour rechercher les validations trouvées, vous pouvez afficher chaque validation à l'aide de certaines commandes pour les examiner.
Pour afficher les métadonnées de validation (auteur, date de création et message de validation):
Pour voir aussi les diffs:
Une fois que vous avez trouvé votre commit, créez une branche sur ce commit avec:
Pour ceux qui sont sous Windows et qui aiment les interfaces graphiques, vous pouvez facilement récupérer les validations (et également les fichiers intermédiaires non validés) avec GitExtensions en utilisant la fonctionnalité
Repository
=>Git maintenance
=>Recover lost objects...
Une commande similaire pour récupérer facilement les fichiers intermédiaires supprimés: https://stackoverflow.com/a/58853981/717372
la source
Si vous aimez utiliser une interface graphique, vous pouvez effectuer toute l'opération avec gitk.
Cela vous permettra de voir l'historique des validations de la branche comme si la branche n'avait pas été supprimée. Maintenant, faites simplement un clic droit sur le commit le plus récent de la branche et sélectionnez l'option de menu
Create new branch
.la source
La solution la mieux votée fait en fait plus que ce qui était demandé:
ou
vous déplacer vers la nouvelle branche avec toutes les modifications récentes que vous avez peut-être oublié de valider. Ce n'est peut-être pas votre intention, surtout lorsque vous êtes en "mode panique" après avoir perdu la branche.
Une solution plus propre (et plus simple) semble être le one-liner (après avoir trouvé le
<sha>
avecgit reflog
):Désormais, ni votre branche actuelle ni les modifications non validées ne sont affectées. Au lieu de cela, seule une nouvelle branche sera créée jusqu'à la
<sha>
.Si ce n'est pas l'astuce, cela fonctionnera toujours et vous obtiendrez une branche plus courte, alors vous pouvez réessayer avec un nouveau
<sha>
et un nouveau nom de branche jusqu'à ce que vous obteniez le bon résultat.Enfin, vous pouvez renommer la branche restaurée avec succès en son nom ou toute autre chose:
Inutile de dire que la clé du succès était de trouver le bon commit
<sha>
, alors nommez vos commits à bon escient :)la source
Ajout à la réponse tfe : il y a aussi le script git-resurrect.sh dans la
contrib/
zone des sources Git (dans le dépôt git.git), qui pourrait vous aider.la source
J'ai utilisé les commandes suivantes pour rechercher et récupérer ma branche supprimée. Les premières étapes proviennent de la description de gcb.
Recherchez maintenant l'ID de validation git (GIT-SHA) basé sur les commentaires de validation et utilisez-le dans la commande ci-dessous. Découvrez une nouvelle branche appelée NEW-BRANCH avec le GIT-SHA précédemment trouvé:
la source
Si vous n'avez pas de reflog, par exemple. comme vous travaillez dans un référentiel nu où le reflog n'est pas activé et la validation que vous souhaitez récupérer a été créée récemment, une autre option consiste à rechercher les objets de validation récemment créés et à les parcourir.
Depuis l'intérieur du
.git/objects
répertoire, exécutez:Cela recherche tous les objets (validations, fichiers, balises, etc.) créés au cours des 12 dernières heures et les filtre pour afficher uniquement les validations. Leur vérification est alors un processus rapide.
J'essaierais d'abord le script git-ressurect.sh mentionné dans la réponse de Jakub .
la source
man find
: "-ctime n - Le statut du fichier a été modifié pour la dernière fois il y a n * 24 heures." Nous devons donc également changer 12 à 0,5 pour avoir le comportement attendu des 12 dernières heures.Pour les utilisateurs de GitHub sans Git installé:
Si vous souhaitez le restaurer à partir du site Web de GitHub , vous pouvez utiliser leur API pour obtenir une liste des événements liés au dépôt:
Première
trouver ces SHA (validation des hachages):
curl -i https://api.github.com/repos/PublicUser/PublicRepo/events
... ou pour des repos privés:
curl -su YourUserName https://api.github.com/repos/YourUserName/YourProject/events
(sera invité à entrer le mot de passe GitHub)
Prochain
• Accédez aux succursales et supprimez celle-ci.
• Sur la même page, sans rechargement , ouvrez DevTools, panneau Réseau. Maintenant, préparez ...
• Cliquez sur restaurer. Vous remarquerez une nouvelle "ligne". Faites un clic droit dessus et sélectionnez "Copier en tant que cURL" et enregistrez ce texte dans un éditeur.
• Append à la fin de la ligne copiée de code, celui - ci:
-H "Cookie="
.Vous devriez maintenant obtenir quelque chose comme:
Dernière étape
PS
Je me rends compte que ce n'est peut-être pas la "solution la plus simple" ou la "bonne" solution, mais elle est offerte au cas où quelqu'un la trouverait utile.
la source
git reflog
et a donc été utile, par exemple, pour avoir supprimé une branche distante et perdu l'accès à l'ordinateur, ce qui a été fait de sorte que rien de utile ne peut être obtenureflog
. Notez que lorsque vous utilisez OAuth ou l'authentification à deux facteurs sur Github, lacurl
commande prend la forme:curl -u username:token https://api.github.com/user
oucurl -H "Authorization: token TOKEN" https://api.github.com/repos/USER_OR_ORG_NAME/REPO_NAME/events
D'après ce que je comprends si la branche à supprimer peut être atteinte par une autre branche, vous pouvez la supprimer en toute sécurité à l'aide
et votre travail n'est pas perdu. N'oubliez pas qu'une branche n'est pas un instantané, mais un pointeur vers une branche. Ainsi, lorsque vous supprimez une branche, vous supprimez un pointeur.
Vous ne perdrez même pas de travail si vous supprimez une branche qui ne peut pas être atteinte par une autre. Bien sûr, ce ne sera pas aussi simple que de vérifier le hachage de validation, mais vous pouvez toujours le faire. C'est pourquoi Git ne peut pas supprimer une branche qui ne peut pas être atteinte en utilisant
-d
. Au lieu de cela, vous devez utiliserCela fait partie d'une vidéo incontournable de Scott Chacon sur Git. Vérifiez la minute 58:00 quand il parle des branches et comment les supprimer.
Introduction à Git avec Scott Chacon de GitHub
la source
reflog
sont simplement exagérées.Assurez-vous d'effectuer tout cela localement et confirmez que votre dépôt est dans l'état souhaité avant de passer à Bitbucket Cloud. Il peut également être judicieux de cloner votre référentiel actuel et de tester ces solutions en premier.
Pour restaurer la branche, utilisez:
Si vous ne connaissez pas le «sha» du haut de votre tête, vous pouvez:
Si vos commits ne sont pas dans votre reflog:
2.Vous pouvez ensuite afficher chaque commit à l'aide de l'un d'eux:
la source
Pour récupérer une branche supprimée, parcourez d'abord l'historique de reflog,
Où n fait référence aux n derniers validations. Trouvez ensuite la tête appropriée et créez une branche avec cette tête.
la source
J'ai rebasé une branche à distance pour essayer d'effacer quelques commits que je ne voulais pas et j'allais choisir les bons que je voulais. Bien sûr, j'ai mal écrit les SHA ...
Voici comment je les ai trouvés (principalement une interface / interaction plus facile à partir des choses sur les réponses ici):
Commencez par générer une liste des validations lâches dans votre journal. Faites-le dès que possible et arrêtez de travailler, car ceux-ci peuvent être jetés par le garbage collector.
Cela crée un
lost
fichier avec toutes les validations que vous devrez consulter. Pour simplifier notre vie, coupons-en seulement le SHA:Vous avez maintenant un
commits
fichier avec tous les commits que vous devez consulter.En supposant que vous utilisez Bash, la dernière étape:
Cela vous montrera les informations de diff et de validation pour chacun d'eux. Et attendez que vous appuyiez Enter. Maintenant, notez tous ceux que vous voulez, puis sélectionnez-les. Une fois que vous avez terminé, appuyez simplement sur Ctrl-C.
la source
GRAND OUI
si vous utilisez GIT, suivez ces étapes simples https://confluence.atlassian.com/bbkb/how-to-restore-a-deleted-branch-765757540.html
si vous utilisez smartgit et que vous poussez déjà cette branche, allez à l'origine, trouvez cette branche et faites un clic droit puis passez à la caisse
la source
Allez d'abord dans git batch pour passer à votre projet comme:
Vous avez tous une liste des changements et le numéro de référence prend le numéro de référence puis passez
à la caisse depuis Android studio ou depuis le git betcha. une autre solution, prenez le numéro de référence et allez dans le studio Android, cliquez sur git branches vers le bas, puis cliquez sur la case à cocher ou la révision après le numéro de référence, puis lol, vous avez les branches.
la source
Ajout à la réponse de tfe, vous pouvez récupérer avec ce processus mentionné, à moins que ses validations ne soient pas récupérées. La branche Git est simplement un pointeur vers une validation particulière dans l'arbre de validation. Mais si vous supprimez le pointeur et que les validations sur cette branche ne sont pas fusionnées dans une autre branche existante, git le traite comme des validations pendantes et les supprime lors du garbage collection, qu'il peut exécuter automatiquement périodiquement.
Si votre branche n'a pas été fusionnée avec une branche existante et si elle a été récupérée, vous perdrez toutes les validations jusqu'au point d'où la branche a été bifurquée à partir d'une branche existante.
la source
Un problème connexe: je suis arrivé sur cette page après avoir cherché "comment savoir quelles sont les branches supprimées".
Lors de la suppression de nombreuses anciennes branches, j'ai senti que j'avais supprimé par erreur l'une des nouvelles branches, mais je ne connaissais pas le nom pour la récupérer.
Pour savoir quelles branches ont été supprimées récemment, procédez comme suit:
Si vous accédez à votre URL Git, qui ressemblera à ceci:
Ensuite, vous pouvez voir le flux, de ce qui est supprimé, par qui, dans un passé récent.
la source
Je l'ai fait sur l'ordinateur dont je supprime la branche:
git reflog
réponse:
et je récupère la branche avec cette commande:
git checkout -b newBranchName 74b2383
la source
Le simple
git reflog
fait de ne pas retourner lesha
pour moi. Seul lecommit id
(qui est long de 8 caractères et un sha est beaucoup plus long)J'ai donc utilisé
git reflog --no-abbrev
Et puis faites la même chose que mentionné ci-dessus:
git checkout -b <branch> <sha>
la source
SI vous utilisez VSCode ... et que vous avez synchronisé votre branche avec le serveur à un moment donné avant de la supprimer ...
Notez que git branch delete supprime uniquement la copie locale, pas la copie sur le serveur. Tout d'abord, dans le panneau Git (icône git sur la barre d'outils de gauche), regardez à travers les branches et voyez si votre branche est toujours là sous "origine / votre_nom_branche". Si c'est le cas, sélectionnez-le et vous devriez récupérer votre code (suggérer de le copier / coller / enregistrer immédiatement localement ailleurs).
Si vous ne voyez pas "origin / your_branch_name", installez l'extension GitLens. Cela vous permet de fouiller visuellement dans les référentiels du serveur et de localiser la copie que vous avez synchronisée avec le serveur. Si vous avez plusieurs référentiels, notez qu'il peut être nécessaire d'ouvrir au moins un fichier à partir du référentiel souhaité afin de faire apparaître le référentiel dans GitLens. Alors:
Ouvrez le panneau GitLens
Développez le référentiel
Vous devriez voir une liste de catégories: Succursales / Contributeurs / Télécommandes / Cachettes / etc
Vous devriez trouver YourLostTreasure sous "Branches" ou éventuellement sous "Télécommandes -> Origines". J'espère que vous verrez une branche avec le nom souhaité - si vous la développez, vous devriez voir les fichiers que vous avez modifiés dans cette branche. Double-cliquez sur les noms de fichiers pour les ouvrir et sauvegardez immédiatement ce code.
Si vous ne voyez pas immédiatement votre branche perdue, fouillez et si vous trouvez quelque chose de prometteur, ouvrez-le immédiatement et saisissez le code. J'ai dû fouiller un peu jusqu'à ce que je trouve TheGoldenBranch, et même alors, le code manquait les un ou deux derniers enregistrements (peut-être parce que je n'ai pas réussi à me synchroniser avec le serveur avant d'essayer de fusionner une branche, mais en cliquant accidentellement sur) Supprimer la branche). Ma recherche a été inutilement allongée car lorsque j'ai trouvé la branche pour la première fois, je n'étais pas complètement sûr que le nom était correct, alors j'ai continué à chercher, et il a fallu un certain temps pour retrouver cette première branche. (Ainsi, Carpe Carpum et puis continuer à chercher.)
la source