La suppression d’une twig dans git la supprime-t-elle de l’histoire?

Venant de svn, commence juste à se familiariser avec git.

Lorsqu’une twig est supprimée dans git, est-elle supprimée de l’historique?

Dans svn, vous pouvez facilement récupérer une twig en annulant l’opération de suppression (fusion inversée). Comme toutes les suppressions dans svn, la twig n’est jamais vraiment supprimée, elle vient d’être supprimée de l’arborescence actuelle.

Si la twig est en fait supprimée de l’historique dans git, qu’advient-il des modifications qui ont été fusionnées à partir de cette twig? Sont-ils conservés?

Les succursales ne sont que des conseils pour commettre en git. Dans git, chaque commit a une arborescence complète, c’est une structure très différente de svn où toutes les twigs et tous les tags (par convention) vivent dans des «dossiers» séparés du repository, à côté du «trunk» spécial.

Si la twig a été fusionnée dans une autre twig avant d’être supprimée, tous les commits seront toujours accessibles depuis l’autre twig lorsque la première twig sera supprimée. Ils restnt exactement tels qu’ils étaient.

Si la twig est supprimée sans être fusionnée dans une autre twig, alors les commits dans cette twig (jusqu’au moment où le fork d’un commit toujours accessible) cessera d’être visible.

Les commits seront toujours conservés dans le référentiel et il est possible de les récupérer immédiatement après la suppression, mais ils seront éventuellement récupérés.

Dans Git, les twigs ne sont que des pointeurs (références) à des commits dans un graphe acyclique dirigé (DAG) de commits. Cela signifie que la suppression d’une twig ne supprime que les références aux commits, ce qui peut rendre inaccessibles certains commits dans le DAG, donc invisibles. Mais tous les commits qui étaient sur une twig supprimée seraient toujours dans le référentiel, au moins jusqu’à ce que les commits inaccessibles soient élagués (par exemple, en utilisant git gc ).

Notez que git branch -d refuse de supprimer une twig si elle ne peut pas être sûre que sa suppression ne laissera pas de commits inaccessibles. Vous devez utiliser la git branch -D la plus puissante pour forcer la suppression d’une twig si elle peut laisser des commits inaccessibles.

Notez également que les commits inaccessibles, s’ils sont présents, ne sont que des commits entre le dernier bout d’une twig supprimée et un commit qui a été fusionné avec une autre twig existante, un commit marqué ou le sharepoint twigment; selon le plus tard. Par exemple dans la situation suivante:

 ---- O ---- * ---- * ---- / M ---- * <- master <- HEAD
      \ /
       \ --. ---- .-- / - x --- y <- branche supprimée

ne commet que "x" et "y" devient inaccessible après la suppression de la twig.

Si vous gc.reflogExpire une twig supprimée dans la période gc.reflogExpire , par défaut 90 jours, vous auriez le dernier bout d'une twig supprimée enregistré dans le reflog HEAD (voir git reflog show HEAD , ou git log --oneline --walk-reflogs HEAD ). Vous devriez pouvoir utiliser le reflog HEAD pour récupérer le pointeur supprimé. Notez également que dans ce cas, les validations inaccessibles dans une seule twig supprimée seraient protégées contre l'élagage (suppression) dans la période gc.reflogExpireUnreachable , qui par défaut est de 30 jours.

Si vous ne trouvez pas le bout d'une twig juste supprimée dans reflog pour HEAD, vous pouvez essayer d'utiliser git fsck pour trouver "commit non accessible " et les examiner (via git show ou git log ) pour trouver la pointe de la twig supprimée.

Indépendamment de la manière dont vous trouvez la pointe d’une twig supprimée, vous pouvez annuler la suppression ou plutôt recréer une twig simplement supprimée en utilisant

 git branch   

Notez cependant que le reflog pour une twig serait perdu.


Il y a aussi un script git-resurrect.sh dans consortingb/ qui aide à trouver des traces d'un emtwigment avec un nom donné et à le ressusciter (annuler).

Si vous vous inquiétez des twigs supprimées accidentellement et que vous n’avez plus de copie locale de votre repository, il existe des extensions de serveurs Git d’entreprise comme Gerrit qui détectera les réécritures d’historique et les suppressions de twigs. peut être restauré si nécessaire et ne sera pas élagué par la récupération de place. Les administrateurs Gerrit peuvent toujours supprimer les validations sélectionnées si nécessaire pour des raisons juridiques.