web-dev-qa-db-fra.com

Github conserve-t-il les branches distantes supprimées dans l'historique? Si oui, peut-on les restaurer?

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.

49
luisgo

Oui, il est possible de restaurer une branche supprimée de git.

Trouvez votre ID de validation: recherchez une branche à l'aide de git reflog

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.

Recréez la branche à partir du point Reflog HEAD point:

git checkout -b branch_name HEAD@{27}

Recréez la branche à partir de l'ID de validation:

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>
52
Highway of Life

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? "

10
VonC

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.

3
Gordon Bean

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.

1
Alexander Bird

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.

1
Jim Zucker