Section courante

A propos

Section administrative du site

Nettoyer une branche Git

Lorsque vous travaillez avec Git, il est assez courant d'accumuler de nombreuses branches différentes pour les différentes fonctionnalités sur lesquelles vous travaillez. Cependant, une fois fusionné avec notre branche principale, vous souhaiterez peut-être nettoyer les branches inutilisées afin que votre espace de travail Git soit plus organisé.

Nettoyer une branche Git locales

Tout d'abord, vous voulez vérifier quelles branches ont déjà été fusionnées avec votre branche actuelle. Dans ce cas, on supposera que vous souhaitez supprimer les branches locales fusionnées avec le master. Pour vérifier les branches fusionnées, utilisez la commande «git branch» avec le paramètre -merged :

git checkout master
git branch --merged commit

vous obtiendrez un résultat ressemblant à ceci :

  feature
* master

Si vous omettez de fournir le hachage de validation, la commande impliquera que vous faites référence à HEAD (également appelé dernier commit de votre branche actuelle). Maintenant que vous avez déjà fusionné les branches locales avec master, vous devrez les supprimer. Le moyen le plus simple de supprimer les branches Git locales est d'utiliser la commande git branch avec le paramètre -d.

git branch -d branch

Le paramètre -d signifie -delete et elle peut être utilisée chaque fois que la branche que vous souhaitez nettoyer est complètement fusionnée avec votre branche en amont. Si votre branche est nommée feature par exemple, pour nettoyer cette branche, vous exécuteriez la commande suivante :

git branch -d release

vous obtiendrez un résultat ressemblant à ceci :

Deleted branch feature (was bd6803e).

Forcer la suppression des branches Git non fusionnées

L'autre façon de nettoyer les branches locales sur Git est d'utiliser la commande git branch avec le paramètre -D. Dans ce cas, le paramètre -D signifie «-delete -force» et elle est utilisée lorsque vos branches locales ne sont pas encore fusionnées avec vos branches de suivi à distance :

git branch -D branch

Comme vous le savez probablement déjà, vous avez une branche locale mais vous avez également une branche de suivi étant un ensemble de branches pour représenter l'état de votre branche à distance (également appelée branche en amont). Par conséquent, si vous effectuez un commit sur votre branche locale sans la pousser vers la branche à distance, votre branche de suivi à distance sera derrière votre branche locale, donc non fusionnée. Pour voir les différences entre votre branche locale et votre branche de suivi à distance, exécutez la commande «git diff» :

git diff branch..origin/branch

S'il y a des différences entre les branches, vous devrez utiliser le paramètre -D pour supprimer la branche localement. Ainsi, en tapant la commande suivante :

git branch -d branch

vous aurez probablement se genre d'erreur :

error: The branch 'branch' is not fully merged.
If you are sure you want to delete it, run 'git branch -D branch'.

tapez plutôt la commande suivante :

git branch -D branch

vous obtiendrez un résultat ressemblant à ceci :

Deleted branch feature (was 033518b).

Maintenant que vos branches locales sont nettoyées, voyons comment vous pouvez supprimer les branches de suivi à distance de votre dépôt Git.

Commande une ligne

Dans certains cas, il peut être utile d'avoir une ligne unique pour supprimer les branches locales inutilisées. Pour ceux étant curieux, voici comment supprimer les branches locales inutilisées en une seule ligne sous une distribution Linux :

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d

Avant de l'exécuter, expliquons rapidement cette commande :

Naturellement, vous pouvez modifier la commande egrep afin d'inclure vos propres branches.

Nettoyer les branches de suivi à distance

Pour rappel, une branche de suivi est une branche locale définie pour suivre les modifications effectuées sur la branche à distance de votre serveur Git. Ces branches de suivi sont créées afin de suivre les modifications, mais elles peuvent devenir obsolètes si les branches à distance ont été supprimées sur le serveur. Dans ce cas, supposons que vous ayez une branche feature locale, une branche de suivi à distance nommée origin/feature, mais que la branche feature a été supprimée sur le serveur à distance.

Git Remote Prune

Afin de nettoyer les branches de suivi à distance, c'est-à-dire de supprimer les références aux branches distantes non existantes, utilisez la commande git remote prune et spécifiez le nom à distance selon la syntaxe suivante :

git remote prune a-distance

Afin de trouver le nom à distance configurées, exécutez la commande git remote avec le paramètre -v.

git remote -v

vous obtiendrez un résultat ressemblant à ceci :

origin https://gitserver.com/user/repository.git (fetch)
origin https://gitserver.com/user/repository.git (fetch)

Dans cet exemple, le nom à distance est origin. Afin de supprimer les branches de suivi à distance, nous exécuterions alors la commande suivante :

git remote prune origin

vous obtiendrez un résultat ressemblant à ceci :

Pruning origin
URL: https://monserveurgit.com/user/repository.git
 * [pruned] origin/feature

Prune en allant chercher

Dans certains flux de travail Git, les branches sont supprimées à distance chaque fois qu'elles sont intégrées à la branche principale. Au lieu d'avoir un prune à distance périodiquement, vous pouvez également récupérer les nouvelles références et appliquer un prune à vos branches en même temps. Afin de nettoyer les branches de suivi à distance lors de la récupération, utilisez la commande git fetch avec le paramètre -prune.

git fetch --prune remote

Sinon, vous pouvez simplement utiliser le raccourci «-p» au lieu de taper «prune» à chaque fois :

git fetch -p remote

Dans le cas d'un origin à distance, on aurait la commande suivante :

git fetch --prune origin

vous obtiendrez un résultat ressemblant à ceci :

From https://monserveurgit.com/user/repository.git
 - [deleted]        (none)     -> origin/feature

Cependant, spécifier le paramètre prune peut être un peu fatigant. Heureusement pour vous, vous pouvez configurer votre espace de travail Git afin d'exécuter l'opération prune à chaque fois que vous effectuez une extraction ou une opération d'extraction. Pour configurer Git pour exécuter prune à chaque extraction, exécutez la commande suivante :

git config --global fetch.prune true

Définition de votre flux de travail Git-flow

Lorsque vous travaillez avec le suivi à distance et les succursales locales, il est important pour vous et votre équipe de définir un flux de données Git auquel vous pouvez vous tenir. Si vous travaillez avec quelqu'un pour examiner les modifications et les approuver dans votre base de code, il peut également être nécessaire pour le réviseur de supprimer la branche à distance par la suite.

De cette façon, vous serez en mesure d'appliquer un prune vos branches de suivi à distance inutilisées et vos branches locales. La définition de cette étape est importante car cela peut devenir assez compliqué de gérer des dizaines de branches différentes sur votre référentiel Git local. Maintenant que vous avez une idée plus claire sur la façon de supprimer les branches de suivi à distance inutilisées, voyons comment vous pouvez effectuer la même astuce pour les branches à distance.

Nettoyer les branches à distance

Nous allons voir comment nous pouvons supprimer les branches distantes lorsqu'elles ne sont plus utilisées. Avant d'effectuer des opérations de suppression sur votre référentiel Git, assurez-vous que vous êtes à jour avec les commits récents ou les fusions effectuées sur votre référentiel :

git pull

Maintenant que vous êtes à jour, vous pouvez commencer à supprimer vos anciennes branches à distance. Pour nettoyer les anciennes branches à distance, utilisez la commande git branch avec les paramètres -r et -merged. Comme toujours, vous devez être sur la branche cible pour voir les branches déjà fusionnées avec cette branche :

git checkout master
git branch -r --merged commit

vous obtiendrez un résultat ressemblant à ceci :

origin/feature
origin/master

Si vous ne spécifiez pas le commit, la commande impliquera simplement que vous faites référence à HEAD (également connu sous le nom de dernier commit sur la branche). Maintenant que vous connaissez les branches à distance déjà fusionnées avec master, vous pouvez utiliser la commande «git push» pour supprimer les branches à distance :

git push remote --delete branch

Dans l'exemple donné précédemment, cette commande donnerait :

git push origin --delete feature

vous obtiendrez un résultat ressemblant à ceci :

To https://monserveurgit.com/user/repository.git
 - [deleted]         feature

Commande en ligne

La commande fournie est en fait très similaire à celle utilisée pour supprimer les branches Git locales. Pour supprimer les branches à distance inutilisées, vous pouvez utiliser la ligne suivant sous Linux :

git branch -r --merged | egrep -v "(^\*|master|dev)" | xargs -n 1 git push --delete origin

Encore une fois, expliquons rapidement les différentes parties de cette commande :



Dernière mise à jour : Vendredi, le 8 janvier 2021