Une gestion efficace des branches est essentielle pour utiliser Git à son plein potentiel. Ce billet est consacré à l’opération Git delete branch
. Vous apprendrez comment supprimer des branches, à la fois localement et dans vos dépôts distants, et s’il est possible de récupérer une branche supprimée.
Supprimer une branche GIT : la version TL;DR
Git rend la gestion des branches vraiment facile – et la suppression des branches locales ne fait pas exception :
git branch -d <branch-name>
Dans certains cas, si la branche contient des modifications non mergées, Git refusera de la supprimer. Si vous êtes sûr de vouloir le faire, vous devrez forcer la suppression en remplaçant le paramètre -d
par un -D
:
git branch -D <branch-name>
Pour supprimer la branche distante, il faut pour cela déployer cette suppression locale vers le dépôt distant :
git push --delete <remote-name> <branch-name>
Quand supprimer une branche GIT ?
Il est courant pour un repo Git d’avoir différentes branches. Elles sont un excellent moyen de travailler sur différentes fonctionnalités et corrections tout en isolant le nouveau code de la base de code principale.
Les dépôts ont souvent une branche principale pour le code principal et les développeurs créent d’autres branches pour travailler sur différentes fonctionnalités.
En général, il est prudent de supprimer des branches après qu’elles aient été fusionnées. Il peut être acceptable de supprimer des branches non fusionnées, par exemple après une expérience qui n’a pas abouti. Vous devez cependant être conscient des conséquences : Les commits peuvent devenir inaccessibles.
Que se passe-t-il si je supprime une branche Git ?
Lorsque vous supprimez une branche dans Git, vous ne supprimez pas les commits eux-mêmes : les commits sont toujours là, et vous pourriez être en mesure de les récupérer.
Lorsque vous supprimez une branche, ce qui se passe dépend de si la branche a déjà été fusionnée. Examinons deux scénarios.
Suppression d’une branche GIT avec des changements fusionnés
Si les changements de la branche ont déjà été fusionnés dans une autre branche, supprimer la branche n’a aucun impact : les changements restent bien sur la branche fusionnée.
Suppression d’une branche GIT avec des changements non fusionnés
Lorsque la branche contient des modifications non mergées, si vous ne possédez pas le hash des précédents commits, vous ne pourrez plus les atteindre ! Et ceci car un commit a une référence vers son parent mais pas vers ses enfants.
Que se passe-t-il si vous supprimez par erreur une branche avec des commits non fusionnés ? Ces changements sont-ils perdus pour de bon ? Pas encore. Il y a un moyen de les récupérer si vous agissez rapidement. Nous y reviendrons plus tard.
Supprimer une branche GIT localement
Git ne vous laissera pas supprimer la branche sur laquelle vous êtes actuellement, vous devez donc vous assurer de vous placer sur une branche que vous ne supprimez PAS 😉
# suppression d'une branche locale
git branch -d <branch>
L’option -d supprimera la branche uniquement si elle a déjà été poussée et fusionnée avec la branche distante. Utilisez plutôt -D si vous voulez forcer la suppression de la branche, même si elle n’a pas encore été poussée ou fusionnée.
La branche est maintenant supprimée localement.
Supprimer une branche GIT sur le dépôt
Voici la commande pour supprimer une branche à distance :
git push <remote> --delete <branch>
Comme nous le disions dans l’introduction, on ne suprime pas une branche distante, on « pousse » la suppression de la branche locale sur le serveur distant. La branche est maintenant supprimée à distance.
Vous pouvez également utiliser cette commande plus courte pour supprimer une branche à distance :
git push <remote> :<branch>
Si vous obtenez une erreur error : unable to push to unqualified destination c’est que quelqu’un d’autre à déjà supprimé la branche distante. Dans ce cas essayez de synchroniser votre liste de branche via la commande git fetch -p
L’option -p signifie « prune (élaguer) ». Après la récupération, les branches qui n’existent plus sur le dépôt distant seront supprimées.
Puis je récupérer une branche supprimée dans GIT ?
Est-il possible de récupérer des branches locales supprimées dans Git ? Eh bien, en quelque sorte. Comme vous l’avez vu, les branches sont simplement des références qui pointent vers un commit. Ce que vous voulez faire, c’est rendre ce commit accessible à nouveau. Pour cela, vous aurez besoin de son identifiant.
Comme vous l’avez vu, lorsque vous supprimez une branche, Git affiche le hash du commit sur lequel pointait la branche. Si vous le notez, vous pourrez plus tard l’utiliser pour accéder à ce commit et créer une nouvelle branche à partir de ce point :
git checkout <HASH QUE VOUS AVEZ ÉCRIT>
git branch <NOM POUR LA BRANCHE>
Et si vous ne l’avez pas écrit ? Il y a encore de l’espoir pour vous au nom d’une commande appelée reflog.
En un mot, git reflog
vous permet de voir les journaux de référence. Dans sa forme la plus basique, vous pouvez l’utiliser pour voir la liste des commits vers lesquels la référence HEAD pointe au fil du temps.
Maintenant, supposons que j’ai fait une terrible erreur et que la branche n’était pas censée être supprimée. Je peux utiliser la commande git reflog :
Ayant récupéré le hash du commit, je peux alors faire (rappelez-vous que votre numéro de hash réel sera différent) :
git checkout b157333
git branch <NOM DE LA NOUVELLE BRANCHE>
Enfin, une mise en garde : git reflog
ne vous sauvera que si la référence HEAD a pointé vers le commit que vous voulez récupérer. Vous pouvez avoir des scénarios où le commit désiré n’est pas réellement dans le reflog, donc il n’y aura aucun moyen pour vous de récupérer son hash.
0 commentaire