Je me demandais s'il y avait un moyen de restaurer une branche supprimée à distance dans github. L'historique garde clairement un enregistrement de la branche et fusionne avec d'autres branches, mais je ne sais pas s'il est possible de restaurer une branche supprimée.
Merci.
Oui, il est possible de restaurer une branche supprimée de git.
Si vous aviez la branche dans votre dépôt git local au cours des 30 derniers jours, vous pourrez peut-être la trouver dans le reflog en utilisant ce qui suit:
git reflog
Recherchez le nom de la branche dans le reflog et notez le HEAD{x}
point ou l'ID de validation.
git checkout -b branch_name HEAD@{27}
Vous pouvez extraire l'ID de validation et créer une branche à partir de ce point de validation:
git checkout -b branch_name <commit id>
Il est possible de demander le support de GitHub et de les faire regarder dans le reflog
de votre dépôt distant ( comme dans ce fil par exemple ).
Si cela est suffisamment proche (moins de 30 jours par défaut) de la suppression, le reflog contient toujours les validations qui ne sont plus référencées par aucune branche.
La création d'une branche sur l'un de ces commits leur permet d'être à nouveau accessible.
Pour en savoir plus sur reflog, voir " qu'est-ce que c'est qu'un reflog et pourquoi est-il si important? "
Mise à jour: le propriétaire du référentiel peut également interroger l'API GitHub EVents :
Voir " GitHub se souvient-il des ID de validation? "
Lorsque la branche a été supprimée pendant très longtemps (dans mon cas, 1 an), mais que vous avez ouvert une demande d'extraction pour cette branche, vous pouvez peut-être la ressusciter en recherchant dans l'historique des demandes d'extraction.
Une fois que j'ai trouvé la demande d'extraction pour cette branche, je pouvais restaurer la branche. Les informations de validation pertinentes, etc. sont également disponibles à partir de la demande d'extraction.
git reflog
vous montrera l'historique de HEAD
. Si la branche que vous avez supprimée s'appelait foo
, alors dans cette sortie, vous devriez voir des lignes comme 48534f5 HEAD@{0}: checkout: moving from master to foo
ou 48534f5 HEAD@{1}: merge foo: Fast-forward
. Vous pouvez rechercher la sortie de git reflog
pour déterminer quel commit doit être le dernier pointé par foo.
Sachez que le fichier de reflog "foo" lui-même est supprimé lorsque foo a été supprimé, mais comme le reflog de HEAD est différent, il existe toujours.
Jetez un œil à ce script python pour les événements github. https://github.com/jimzucker/githubutils/blob/master/githubreflog.py
Je l'ai créé pour extraire des événements et les rendre lisibles, vous pouvez le diriger vers grep et rechercher la branche qui vous intéresse. S'il y a suffisamment d'historique, vous verrez l'événement de suppression pour la branche en question, la ligne suivante sera le dernier événement Push et c'est le sha qui vous intéresse.