18212 votes

Comment supprimer une branche Git localement et à distance ?

Je veux supprimer une branche à la fois localement et à distance.

Échec des tentatives de suppression d'une branche distante

$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.

$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.

$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).

$ git push
Everything up-to-date

$ git pull
From github.com:gituser/gitproject

* [new branch] bugfix -> origin/bugfix
Already up-to-date.

Que dois-je faire différemment pour réussir à supprimer le remotes/origin/bugfix à la fois localement et à distance ?

1259 votes

Note du modérateur : Si vous avez l'intention de répondre à cette question, notez qu'il y a déjà 40 réponses postées. Votre nouvelle réponse apportera-t-elle une valeur ajoutée substantielle ?

63 votes

Note : pour Git 2.5+ (Q2 2015), le message exact sera " deleted remote-tracking branch " : voir github.com/git/git/commit/

0 votes

Vous serez peut-être intéressé par ce script qui simplifie la différence entre la suppression d'une branche locale ET d'une branche distante : tlbx.app/blog/delete-any-git-branch-the-easy-way

22860voto

Matthew Rankin Points 71628

Résumé exécutif

$ git push -d <remote_name> <branchname>
$ git branch -d <branchname>

Note : Dans la plupart des cas, <remote_name> sera origin .

Supprimer la branche locale

Pour supprimer le local La branche utilise l'un des éléments suivants :

$ git branch -d <branch_name>
$ git branch -D <branch_name>
  • El -d est un alias de l'option --delete qui ne supprime la branche que si elle a déjà été entièrement fusionnée dans sa branche amont.
  • El -D est un alias de l'option --delete --force qui supprime la branche "indépendamment de son statut de fusion". [Source : man git-branch ]
  • A partir de Git v2.3 , git branch -d (supprimer) a appris à honorer le -f (force).
  • Vous recevrez une erreur si vous essayez de supprimer la branche actuellement sélectionnée.

Supprimer la branche distante

A partir de Git v1.7.0 vous pouvez supprimer une à distance branche utilisant

$ git push <remote_name> --delete <branch_name>

ce qui peut être plus facile à retenir que

$ git push <remote_name> :<branch_name>

qui a été ajouté en Git v1.5.0 "pour supprimer une branche distante ou une balise."

En commençant par Git v2.8.0 vous pouvez également utiliser git push avec le -d comme alias de l'option --delete . Par conséquent, la version de Git que vous avez installée déterminera si vous devez utiliser la syntaxe la plus simple ou la plus difficile.

Supprimer une branche distante [Réponse originale du 5-Jan-2010].

Extrait du chapitre 3 de Pro Git par Scott Chacon :

Suppression des branches distantes

Supposons que vous en ayez terminé avec une branche distante - disons que vous et vos collaborateurs avez terminé une fonctionnalité et l'avez fusionnée dans la branche principale de votre branche distante (ou toute autre branche dans laquelle se trouve votre ligne de code stable). Vous pouvez supprimer une branche distante en utilisant la syntaxe plutôt obtuse suivante git push [remotename] :[branch] . Si vous voulez supprimer votre branche server-fix du serveur, vous exécutez ce qui suit :

$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
 - [deleted]         serverfix

Boom. Plus de branches sur votre serveur. Vous voudrez peut-être écouter attentivement cette page, car vous aurez besoin de cette commande, et vous oublierez probablement la syntaxe. Une façon de se souvenir de cette commande est de se rappeler la commande git push [remotename] [localbranch]:[remotebranch] syntaxe dont nous avons parlé un peu plus tôt. Si vous laissez de côté le [localbranch] portion, alors vous dites essentiellement, "Prenez rien de mon côté et faites en sorte que ce soit [remotebranch] ."

J'ai émis git push origin: bugfix et ça a marché à merveille. Scott Chacon avait raison, je vais vouloir oreille de chien cette page (ou virtuellement l'oreille du chien en répondant à cette question sur Stack Overflow).

Ensuite, vous devez exécuter ceci sur d'autres machines

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

pour propager les changements.

416 votes

N'oubliez pas de faire un git fetch --all --prune sur d'autres machines après avoir supprimé la branche distante sur le serveur. ||| Après avoir supprimé la branche locale à l'aide de la commande git branch -d et en supprimant la branche distante avec git push origin --delete d'autres machines peuvent encore avoir des "branches de suivi obsolètes" (pour les voir faire git branch -a ). Pour s'en débarrasser, il faut git fetch --all --prune .

15 votes

En plus de celui de @TrevorBoydSmith. git branch -a pour visualiser toutes les branches, vous pouvez également utiliser git branch -r pour visualiser uniquement les branches distantes. voir aussi git remote show origin - source : gitready.com/intermediate/2009/02/13/list-remote-branches.html

20 votes

Je devais courir git branch -D Branch_Name pour se débarrasser de la branche locale

3481voto

Eric Brotto Points 11383

La réponse de Matthieu est excellent pour enlever à distance branches et j'apprécie également l'explication, mais pour faire une simple distinction entre les deux commandes :

Pour retirer un filiale locale de votre machine :

git branch -d {the_local_branch} (utiliser -D pour forcer la suppression de la branche sans vérifier le statut de fusion)

Pour retirer un filiale éloignée du serveur :

git push origin --delete {the_remote_branch}

Référence : Git : Supprimer une branche (locale ou distante)

263 votes

@megido bien -D force les suppressions, -d vous donne un avertissement s'il n'est pas déjà fusionné.

8 votes

Si votre branche locale n'est pas fusionnée avec master et que vous avez exécuté 'git branch -d your_branch alors vous aurez une erreur comme error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.

15 votes

Je suggère d'utiliser -d au lieu de -D car c'est plus sûr. Si -d échoue à cause de commits non immergés, vous devez l'évaluer et si vous êtes sûr de pouvoir les supprimer, utilisez -D.

2193voto

Cupcake Points 22154

El Réponses courtes

Si vous souhaitez obtenir des explications plus détaillées sur les commandes suivantes, consultez les réponses longues de la section suivante.

Suppression d'une branche distante

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 1.7.0 or newer)
git push origin :<branch>          # Git versions older than 1.7.0

Suppression d'une branche locale

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches

Suppression d'une branche locale de suivi à distance

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete remote-tracking branches
git fetch <remote> -p      # Shorter

El réponse longue : il y a trois branches différentes à supprimer !

Lorsque vous avez affaire à la suppression de branches à la fois localement et à distance, gardez à l'esprit que il y a trois branches différentes impliquées :

  1. La branche locale X .
  2. La branche d'origine distante X .
  3. La branche locale de suivi à distance origin/X qui suit la branche distante X .

Visualization of three branches

L'affiche originale a été utilisée :

git branch -rd origin/bugfix

Qui a seulement supprimé son branche locale de suivi à distance origin/bugfix et non la branche distante réelle bugfix en origin .

Diagram 2

Pour supprimer cette branche distante actuelle vous avez besoin

git push origin --delete bugfix

Diagram 3

Détails supplémentaires

Les sections suivantes décrivent des détails supplémentaires à prendre en compte lors de la suppression de vos branches distantes et de suivi à distance.

Pousser pour supprimer les branches distantes supprime aussi les branches de suivi à distance

Notez que la suppression de la branche distante X à partir de la ligne de commande en utilisant un git push supprimera également la branche locale de suivi à distance origin/X Il n'est donc pas nécessaire d'élaguer la branche obsolète de suivi à distance avec la commande git fetch --prune o git fetch -p . Cependant, cela ne ferait pas de mal si vous le faisiez quand même.

Vous pouvez vérifier que la branche de suivi à distance origin/X a également été supprimé en exécutant la commande suivante :

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

Élagage de la branche obsolète de suivi à distance local origin/X

Si vous n'avez pas supprimé votre branche distante X à partir de la ligne de commande (comme ci-dessus), votre dépôt local contiendra toujours une branche de suivi à distance (maintenant obsolète). origin/X . Cela peut se produire si vous supprimez une branche distante directement via l'interface web de GitHub, par exemple.

Une façon typique de supprimer ces branches de suivi à distance obsolètes (depuis la version 1.6.6 de Git) est de lancer simplement l'opération suivante git fetch avec le --prune ou plus court -p . Notez que cela supprime toutes les branches locales obsolètes de suivi à distance pour toutes les branches distantes qui n'existent plus sur le site distant. :

git fetch origin --prune
git fetch origin -p # Shorter

Voici la citation pertinente du Notes de publication de la version 1.6.6 (c'est moi qui souligne) :

"git fetch" appris --all y --multiple pour lancer la recherche à partir de plusieurs dépôts, et --prune option pour supprimer le suivi à distance qui sont devenues périmées. Ceux-ci rendent "git remote update" et "git remote prune" moins nécessaires (il n'est pas prévu de supprimer "remote update " et " remote prune ").

Alternative à l'élagage automatique ci-dessus pour les branches de suivi à distance obsolètes

Alternativement, au lieu d'élaguer vos branches locales obsolètes de suivi à distance par l'intermédiaire de git fetch -p , vous pouvez éviter de faire l'opération réseau supplémentaire en supprimant manuellement la ou les branches avec la commande --remotes o -r drapeaux :

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

Voir aussi

0 votes

D'après votre illustration, je peux voir qu'il y a un dépôt de clone local et un dépôt d'origine distant. Il y a donc au moins deux branches physiques. Où se trouve la troisième branche à supprimer ? La troisième branche est-elle seulement un pointeur vers un commit dans le clone local ?

6 votes

@huggie c'est à peu près correct. Les branches dans Git sont juste des signets attachés aux commits. Ainsi, dans mes graphiques ci-dessus, il y a X y origin/X les signets dans le clone local (2 branches), et puis il y a X sur le distant (ce qui fait 3 branches).

7 votes

+1 pour la branche de suivi à distance. Cette branche est la cause des problèmes lorsque vous clonez la branche de quelqu'un d'autre. Elle continue à suivre vos commits et vous demande si vous voulez pousser vers la branche de cette personne.

841voto

pagetribe Points 5071

Vous pouvez également utiliser ce qui suit pour supprimer la branche distante

git push --delete origin serverfix

Ce qui fait la même chose que

git push origin :serverfix

mais c'est plus facile à retenir.

1 votes

...et plus sûr à utiliser :O

1 votes

Vous avez oublié la partie concernant la suppression de la branche locale qui peut être faite par : git branch -d <local_branch> o git branch -D <local_branch> pour la suppression forcée

388voto

pfrenssen Points 1293

Conseil : Lorsque vous supprimez des branches en utilisant

git branch -d <branchname> # Deletes local branch

o

git push origin :<branchname> # Deletes remote branch

seules les références sont supprimées. Même si la branche est effectivement supprimée sur le serveur distant, les références à celle-ci existent toujours dans les dépôts locaux des membres de votre équipe. Cela signifie que pour les autres membres de l'équipe, les branches supprimées sont toujours visibles lorsqu'ils effectuent une recherche de type git branch -a .

Pour résoudre ce problème, les membres de votre équipe peuvent élaguer les branches supprimées avec

git remote prune <repository>

Il s'agit généralement git remote prune origin .

14 votes

Vous devez préciser que ce qui précède git push L'opération supprime la branche locale et la branche distante.

22 votes

Notez que git remote prune est un moyen quelque peu obsolète de supprimer des branches de suivi à distance obsolètes, le moyen plus récent de le faire est d'utiliser git fetch --prune o git fetch -p .

1 votes

@RRMadhav, en effet vous ne verrez pas la branche supprimée après l'avoir supprimée puisque la référence à la branche distante sera supprimée pour vous localement. Toute autre personne de votre équipe qui a extrait cette branche aura toujours cette référence et la verra toujours, à moins qu'elle n'élague la branche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X