Question

En venant de svn, juste de commencer à se familiariser avec git.

Quand une branche est supprimée dans git, est-il retiré de l'histoire?

svn, vous pouvez facilement récupérer une branche en rétablissant l'opération de suppression (fusion inverse). Comme tous svn supprime, la branche est jamais vraiment supprimé, il est juste retiré de l'arbre en cours.

Si la branche est supprimée de l'histoire dans git, ce qui arrive aux changements qui ont été fusionnées de cette branche? Sont-ils conservés?

Était-ce utile?

La solution

Les branches ne sont que des pointeurs vers commits git. Dans git chaque commettras a un arbre source complet, il est une structure très différente de svn où toutes les branches et les tags (par convention) vivent dans différents dossiers « » du référentiel à côté du « tronc » spécial.

Si la branche a été fusionnée dans une autre branche avant qu'elle ne soit supprimée, tous les commits sera toujours accessible de l'autre branche lorsque la première branche est supprimé. Ils restent exactement comme elles étaient.

Si la branche est supprimée sans être fusionnées dans une autre branche, puis les commits dans cette branche (jusqu'au point où la fourchue d'une validation qui est encore accessible) cessera d'être visible.

Les commits seront toujours conservés dans le dépôt et il est possible de les récupérer immédiatement après la suppression, mais finalement ils seront garbage collection.

Autres conseils

Dans Git, les branches ne sont que des pointeurs (références) à commits un graphe orienté acyclique (DAG) de commits. Cela signifie que la suppression d'une branche supprime uniquement les références à engage, ce qui pourrait faire des commits dans le DAG inaccessible, donc invisible. Mais tous les commits qui étaient sur une branche supprimé seraient encore dans le dépôt, au moins jusqu'à ce que commits inatteignables s'élagués (par exemple en utilisant git gc).

Notez que git branch -d refuserait de supprimer une branche si elle ne peut pas être sûr que sa suppression ne laisserait pas commits inatteignables. Vous devez utiliser le git branch -D plus fort pour forcer la suppression d'une branche si elle peut laisser commits inatteignables.

Notez également que injoignable engage, si elles sont présentes, ne sont que les commits entre la dernière extrémité d'une branche supprimée et soit un commit qui se est fusionnée à une autre branche existante, toute étiquetée commettre, ou le point de ramification; cette date est postérieure. Par exemple, dans la situation suivante:

----O----*----*----/M----*    <-- master <-- HEAD
     \            /
      \--.----.--/--x---y     <-- deleted branch

n'engage « x » et « y » deviendrait inaccessible après la suppression de la branche.

Si vous exploitez sur une branche supprimé dans le délai de gc.reflogExpire, par défaut 90 jours, vous auriez la dernière extrémité d'une branche supprimé enregistrée dans la tête reflog (voir git reflog show HEAD ou git log --oneline --walk-reflogs HEAD). Vous devriez pouvoir utiliser HEAD reflog pour récupérer le pointeur supprimé. Notez également que, dans ce cas, commits inatteignables dans juste une branche supprimé seraient protégées de la taille (suppression) dans la période de gc.reflogExpireUnreachable, qui par défaut est de 30 jours.

Si vous ne trouvez pas la pointe d'une branche juste supprimé dans reflog pour la tête, vous pouvez essayer d'utiliser git fsck pour trouver « inatteignable commettre », et d'examiner les (via git show <sha1> ou git log <sha1>) pour trouver la pointe de la branche supprimée.

indépendant sur la façon dont vous trouvez la pointe d'une branche supprimé, vous pouvez annuler la suppression, ou plutôt recréer une branche simplement supprimé en utilisant

git branch <deleted-branch> <found-sha1-id>

Notez cependant que reflog pour une branche serait perdue.


Il y a aussi git-resurrect.sh script contrib/ qui aide à trouver des traces d'une pointe de branche avec le nom donné et ressuscitent (Undelete) il.

Si vous êtes inquiet au sujet des branches supprimés accidentellement et ne pas une copie locale de votre pension plus longtemps, il y a des extensions de serveurs Git entreprise comme Gerrit qui permet de détecter les réécritures de l'histoire et les suppressions de succursales, les sauvegardera sous ref spéciale afin qu'ils puissent être restaurés en cas de besoin et ne seront pas élagués par la collecte des ordures. Les administrateurs Gerrit peuvent encore supprimer commits sélectionnés si nécessaire pour des raisons juridiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top