Comment supprimer une branche Git localement et à distance?

16966

Je souhaite supprimer une branche 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 la remotes/origin/bugfixbranche localement et à distance?

Matthew Rankin
la source
1061
Note du modérateur: Si vous avez l'intention de répondre à cette question, notez qu'il y a déjà 40 réponses publiées. Votre nouvelle réponse ajoutera-t-elle une valeur substantielle?
Robert Harvey
54
Remarque: pour Git 2.5+ (Q2 2015), le message exact sera " deleted remote-tracking branch": voir github.com/git/git/commit/…
VonC
Vous pouvez ê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
Mig
@RobertHarvey seulement 39 maintenant
Adam
@Adam: 81. 42 réponses ont été supprimées pour diverses raisons. L'obsession inexpliquée du public pour un sujet particulier est l'un des plus grands mystères de la vie.
Robert Harvey

Réponses:

21437

Résumé

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

Notez que dans la plupart des cas, le nom distant est origin. Dans un tel cas, vous devrez utiliser la commande comme ceci.

$ git push -d origin <branch_name>

Supprimer la branche locale

Pour supprimer la branche locale , utilisez l'une des méthodes suivantes:

$ git branch -d branch_name
$ git branch -D branch_name

Remarque: L' -doption est un alias pour --delete, qui ne supprime la branche que si elle a déjà été complètement fusionnée dans sa branche amont. Vous pouvez également utiliser -D, qui est un alias pour --delete --force, qui supprime la branche "quel que soit son statut fusionné". [Source: man git-branch]

Supprimer la branche distante [Mis à jour le 8-Sep-2017]

Depuis Git v1.7.0 , vous pouvez supprimer une branche distante en utilisant

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

qui pourrait être plus facile à retenir que

$ git push <remote_name> :<branch_name>

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

À partir de Git v2.8.0, vous pouvez également utiliser git pushl' -doption comme alias pour --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 succursale distante [Réponse originale du 5 janvier 2010]

Extrait du chapitre 3 de Pro Git de Scott Chacon:

Suppression de branches distantes

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

$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Boom. Plus de succursales sur votre serveur. Vous voudrez peut-être mettre cette page à l'oreille, car vous aurez besoin de cette commande et vous oublierez probablement la syntaxe. Un moyen de se souvenir de cette commande est de rappeler la git push [remotename] [localbranch]:[remotebranch]syntaxe que nous avons examinée un peu plus tôt. Si vous oubliez la [localbranch]portion, vous dites essentiellement: «Ne prenez rien de mon côté et faites en sorte que cela soit [remotebranch]

J'ai émis git push origin: bugfixet cela a fonctionné à merveille. Scott Chacon avait raison - je vais vouloir écouter cette page (ou pratiquement l'oreille du chien en répondant à cela sur Stack Overflow).

Ensuite, vous devez l'exécuter 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.

Matthew Rankin
la source
353
N'oubliez pas de faire un git fetch --all --prunesur d'autres machines après avoir supprimé la branche distante sur le serveur. ||| Après avoir supprimé la branche locale avec git branch -det supprimé la branche distante avec d' git push origin --deleteautres machines, il peut toujours y avoir des "branches de suivi obsolètes" (pour les voir faire git branch -a). Pour s'en débarrasser, faites-le git fetch --all --prune.
Trevor Boyd Smith
14
en plus de @ TrevorBoydSmith git branch -apour afficher toutes les branches, vous pouvez également utiliser git branch -rpour afficher uniquement les branches distantes. voir aussi git remote show origin- source: gitready.com/intermediate/2009/02/13/list-remote-branches.html
Sandra
17
J'ai dû courir git branch -D Branch_Namepour me débarrasser de la branche locale
Kolob Canyon
11
@KolobCanyon Vous ne devez utiliser -D que si la branche n'a pas été fusionnée dans une autre branche.
BTRUE
3
La question était "Que dois-je faire différemment pour réussir à supprimer la branche remotes / origin / bugfix à la fois localement et sur GitHub?" Après avoir exécuté les commandes dans votre réponse mise à jour, la branche locale est toujours présente. Ce serait bien si la réponse acceptée était une réponse complète . C'est absolument incroyable de voir à quel point Git fait des tâches simples ...
jww
3317

La réponse de Matthew est excellente pour supprimer les branches distantes et j'apprécie également l'explication, mais pour faire une distinction simple entre les deux commandes:

Pour supprimer une branche locale de votre machine:

git branch -d {the_local_branch}(utilisez -Dplutôt pour forcer la suppression de la branche sans vérifier le statut fusionné)

Pour supprimer une branche distante du serveur:

git push origin --delete {the_remote_branch}

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

Eric Brotto
la source
250
@megido -Dforce bien les suppressions, -dvous donne un avertissement s'il n'est pas déjà fusionné.
TankorSmash
8
Si votre branche locale n'est pas fusionnée avec master et a fonctionné, 'git branch -d your_branchvous aurez une erreur commeerror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
geeks
12
Je suggère d'utiliser -d au lieu de -D car c'est plus sûr. Si -d échoue en raison de validations non fusionnées, vous devez évaluer cela et s'il est définitivement OK de le supprimer, utilisez -D.
rooby
7
D'autres avec des clones de référentiel où les branches distantes ont été supprimées doivent s'exécuter git remote prune <name>(par exemple git remote prune origin) afin de supprimer localement les branches périmées qui n'existent plus dans la télécommande.
code_dredd
3
Je voudrais ajouter que -d donne un avertissement s'il n'est pas fusionné avec le HEAD actuel. Si vous avez besoin de clarté, je recommande cette commande. git branch -a --merged origin/masterElle répertorie toutes les branches, locales et distantes; qui ont été fusionnés en maître. Informations supplémentaires ici
Eric
2043

Les réponses courtes

Si vous souhaitez des explications plus détaillées sur les commandes suivantes, consultez les réponses longues dans 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 succursale 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

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

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

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

Visualisation de trois branches

L'affiche originale utilisée:

git branch -rd origin/bugfix

Ce qui ne supprimé branche de suivi à distance locale origin/bugfix , et non la branche à distance réelle bugfixsur origin.

Diagramme 2

Pour supprimer cette branche distante réelle , vous devez

git push origin --delete bugfix

Diagramme 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 également les branches de suivi à distance

Notez que la suppression de la branche distante Xde la ligne de commande à l'aide de a git push supprimera également la branche de suivi à distance locale origin/X , il n'est donc pas nécessaire d'élaguer la branche de suivi à distance obsolète avec git fetch --pruneou git fetch -p. Cependant, cela ne ferait pas de mal si vous le faisiez de toute façon.

Vous pouvez vérifier que la branche de suivi à distance origin/Xa également été supprimée en exécutant ce qui suit:

# 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 l'origine de la branche de suivi à distance locale obsolète / X

Si vous n'avez pas supprimé votre branche distante Xde la ligne de commande (comme ci-dessus), votre référentiel local contiendra toujours (une branche désormais obsolète) de suivi à distance origin/X. Cela peut se produire si vous avez supprimé une branche distante directement via l'interface Web de GitHub, par exemple.

Un moyen typique de supprimer ces branches de suivi à distance obsolètes (depuis la version 1.6.6 de Git) est de simplement exécuter git fetchavec --pruneou plus court -p. Notez que cela supprime toutes les branches de suivi à distance locales obsolètes pour toutes les branches distantes qui n'existent plus sur la télécommande :

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

Voici la citation pertinente des notes de mise à jour 1.6.6 (soulignement le mien):

"git fetch" appris --all et --multipleoptions, pour exécuter fetch à partir de nombreux référentiels, et --pruneoption pour supprimer les branches de suivi à distance qui sont devenues obsolètes. Celles-ci rendent "git remote update" et "git remote prune" moins nécessaires (il n'est pas prévu de supprimer "remote update" ni "remote prune", cependant).

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

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

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

Voir également

Peter Mortensen
la source
D'après votre illustration, je peux voir qu'il y a un dépôt local de clone et un dépôt d'origine distant. Il y a donc au moins deux branches physiques. Où est la troisième branche à supprimer? La troisième branche est-elle uniquement un pointeur pointant vers une validation dans le référentiel de clone local?
huggie
6
@ huggie c'est à peu près correct. Les branches dans Git ne sont que des signets attachés aux commits. Donc , dans mes graphiques ci - dessus, il y a Xet origin/Xsignets dans le clone local (2 branches), et puis il y a Xla télécommande ( en faisant 3 branches).
6
+1 pour la branche de suivi à distance. Cette branche est à l'origine des problèmes lorsque vous clonez la branche de quelqu'un d'autre. Il continue de suivre vos commits et vous demande si vous souhaitez pousser vers la succursale de cette personne.
Kermit_ice_tea
1
Les graphismes seuls sont dorés Bravo.
Mogens TrasherDK
1
Pour le plaisir des futurs lecteurs: Ce dont parle @Kermit_ice_tea ci-dessus est une branche locale (comme décrit dans cette réponse), pas une branche de suivi à distance . Lorsqu'une branche locale a une "branche amont" configurée pour elle, elle tirera par défaut de cette branche distante et la poussera. Une branche locale sur laquelle est définie une "branche amont" est appelée "branche de suivi" , il est donc facile de la confondre avec les branches de suivi à distance en raison de la terminologie similaire.
David P
1522

Étapes pour supprimer une branche:

Pour supprimer la branche distante:

git push origin --delete <your_branch>

Pour supprimer la branche locale , vous disposez de trois méthodes :

1: git branch -D <branch_name>

2: git branch --delete --force <branch_name>  # Same as -D

3: git branch --delete  <branch_name>         # Error on unmerge

Expliquez: OK, expliquez simplement ce qui se passe ici!

Faites simplement git push origin --deletepour supprimer votre branche distante uniquement , ajoutez le nom de la branche à la fin et cela la supprimera et la poussera vers la télécommande en même temps ...

Aussi, git branch -Dqui supprime simplement la branche locale seulement ! ...

-Dsignifie --delete --forcequi supprimera la branche même si elle n'est pas fusionnée (forcer la suppression), mais vous pouvez également utiliser -dce qui signifie --deletequi jette une erreur respective du statut de fusion de la branche ...

Je crée également l' image ci-dessous pour montrer les étapes:

Supprimer une branche distante et locale dans git

Alireza
la source
49
git branch -aaffichera les branches locales et distantes.Il vous sera utile de présenter le diagramme.
LoranceChen
4
notez que si vous définissez la branche que vous souhaitez supprimer, vous devez extraire une branche autre que celle que vous devez supprimer (par exemple: maître) avant de supprimer la branche locale.
BaDr Amer
Lorsque les branches sont supprimées à l'origine, votre référentiel local n'en tiendra pas compte. Vous aurez toujours vos versions localement mises en cache de ces branches (ce qui est en fait bon) mais git branch -a les listera toujours comme branches distantes. Vous pouvez nettoyer ces informations localement comme ceci: git remote prune originVos copies locales des branches supprimées ne sont pas supprimées par cela. Le même effet est obtenu en utilisantgit fetch --prune
vibs2006
2
L'image est distrayante et très grande et n'ajoute rien à la réponse. J'espère que cela ne deviendra pas une tendance sur SO.
jmiserez
797

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 il peut être plus facile de s'en souvenir.

pagetribe
la source
1
... et plus sûr à utiliser: O
cst1992
1
Vous avez oublié la partie sur la suppression de la branche locale qui peut être effectuée par: git branch -d <local_branch>ou git branch -D <local_branch>pour la suppression forcée
Amit Dash
370

Conseil: lorsque vous supprimez des branches à l'aide de

git branch -d <branchname> # Deletes local branch

ou

git push origin :<branchname> # Deletes remote branch

seules les références sont supprimées. Même si la branche est réellement supprimée sur la télécommande, les références à celle-ci existent toujours dans les référentiels locaux des membres de votre équipe. Cela signifie que pour les autres membres de l'équipe, les branches supprimées sont toujours visibles lorsqu'elles le font git branch -a.

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

git remote prune <repository>

C'est typiquement git remote prune origin.

pfrenssen
la source
14
Vous devez préciser que l' git pushopération ci-dessus supprime la branche locale et la branche distante.
Annika Backstrom
22
Notez que git remote prunec'est une façon quelque peu obsolète de supprimer les branches de suivi à distance obsolètes, la nouvelle façon de le faire est d'utiliser git fetch --pruneou git fetch -p.
1
@RRMadhav, en effet, vous ne verrez pas la branche supprimée après l'avoir supprimée car la référence à la branche distante sera supprimée localement pour vous. Toute autre personne de votre équipe qui a vérifié cette branche aura toujours cette référence et la verra à moins qu'elle ne taille la branche.
pfrenssen
362

Si vous souhaitez supprimer une branche, commencez par payer à la branche autre que la branche à supprimer.

git checkout other_than_branch_to_be_deleted

Suppression de la branche locale:

git branch -D branch_to_be_deleted

Suppression de la branche distante:

git push origin --delete branch_to_be_deleted
Praveen Hiremath
la source
261
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Felipe
la source
7
Notez que -D force la suppression. Il est toujours préférable de l'utiliser -d, ce qui vous rappellera si vous devez faire quelque chose de dangereux.
Jonathon Reinhart
13
ahahah :) c'est à vous de choisir: utilisez -d si vous voulez voir git pleurer ou -D si vous voulez pleurer.
Felipe
225

C'est simple: il suffit d'exécuter la commande suivante:

Pour supprimer une branche Git localement et à distance, supprimez d'abord la branche locale à l'aide de cette commande:

git branch -d example

(Voici examplele nom de la branche.)

Et après cela, supprimez la branche distante à l'aide de cette commande:

git push origin :example
Islam syeful
la source
199

Une autre approche est:

git push --prune origin

AVERTISSEMENT: cela supprimera toutes les branches distantes qui n'existent pas localement. Ou plus globalement,

git push --mirror

fera en sorte que le référentiel distant ressemble à la copie locale du référentiel (les têtes, télécommandes et balises locales sont reflétées sur la télécommande).

imanuelcostigan
la source
1
git push --prune origin n'a rien fait pour moi sur gitlab: git clone git: //repo.git; git branch -d -r origin / some-branches; git push --prune origine; rendements: tout à jour; git fetch; ramène les branches supprimées localement; git push --mirror; maintenant ils sont vraiment partis!
eMBee
166

J'utilise les éléments suivants dans mes paramètres Bash :

alias git-shoot="git push origin --delete"

Ensuite, vous pouvez appeler:

git-shoot branchname
crizCraig
la source
11
J'ai fini par ajouter l'alias "shoot" dans mon .gitconfig shoot = push origin --delete
hdost
Si votre origine est une Stash Atlassian et que la branche est définie par défaut, vous obtiendrez une erreur "Par défaut, la suppression de la branche actuelle est refusée ...". J'ai dû changer la branche par défaut dans Stash pour pointer vers une autre branche avant de pouvoir la supprimer.
neoscribe
C'est parfaitement simple comme vous l'avez fait, mais fyi git vous permet également de créer des commandes personnalisées. Mettez git push origin --delete $1un fichier sur votre chemin appelé git-shootet git shoot branchnamecela fonctionnera aussi.
mahemoff
132

Supprimer localement:

Pour supprimer une branche locale, vous pouvez utiliser:

git branch -d <branch_name>

Pour supprimer une branche de force, utilisez -Dau lieu de -d.

git branch -D <branch_name>

Supprimer à distance:

Il y a deux options:

git push origin :branchname

git push origin --delete branchname

Je vous suggère d'utiliser la deuxième façon car elle est plus intuitive.

Rahul Gupta
la source
129

Depuis janvier 2013, GitHub a inclus un Delete branchbouton à côté de chaque branche dans votre page "Branches".

Article de blog pertinent: créer et supprimer des branches

Nacho Coloma
la source
3
Je n'ai commencé à utiliser Github que cette année, alors je me demandais pourquoi cette question était si bien notée et pourquoi aucune des meilleures réponses ne suggérait de la supprimer de l'interface Web de Github! Il est intéressant de noter que ce n'est qu'un ajout récent.
Cam Jackson
6
J'allais souligner celui-ci. Notez que le bouton ne supprimera pas votre branche locale ... voir cette réponse pour savoir comment faire: stackoverflow.com/a/10999165/901641
ArtOfWarfare
127

Si vous souhaitez effectuer ces deux étapes avec une seule commande, vous pouvez lui créer un alias en ajoutant ce qui suit à votre ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"

Vous pouvez également l'ajouter à votre configuration globale à partir de la ligne de commande à l'aide de

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'

REMARQUE : si vous utilisez -d(minuscule d), la branche ne sera supprimée que si elle a été fusionnée. Pour forcer la suppression à se produire, vous devrez utiliser-D (majuscule D).

Ryan Kohn
la source
6
C'est ce que je cherchais. Mon propre alias de fonction shell n'a pas fonctionné (EOF inattendu) et je n'ai pas pu comprendre pourquoi, mais cela fonctionne très bien! La seule modification que j'ai apportée a été de remplacer &&par ;pour que même si la première commande échoue, la seconde s'exécute toujours (il existe parfois uniquement local ou distant).
user1021726
116

Pour supprimer votre succursale localement et à distance

  • Paiement à la succursale principale - git checkout master

  • Supprimez votre succursale distante - git push origin --delete <branch-name>

  • Supprimez votre succursale locale - git branch --delete <branch-name>

mfathy00
la source
113

Vous pouvez également le faire en utilisant git remote prune origin

$ git remote prune origin
Pruning origin
URL: [email protected]/yourrepo.git
 * [pruned] origin/some-branchs

Il taille et supprime les branches de suivi à distance d'une git branch -rliste.

nickleefly
la source
108

En plus des autres réponses, j'utilise souvent l' outil git_remote_branch . C'est une installation supplémentaire, mais cela vous offre un moyen pratique d'interagir avec les branches distantes. Dans ce cas, supprimer:

grb delete branch

Je trouve que j'utilise aussi assez souvent les commandes publishet track.

u2622
la source
98

Une commande à une ligne pour supprimer à la fois local et distant :

D=branch-name; git branch -D $D; git push origin :$D

Ou ajoutez l'alias ci-dessous à votre ~ / .gitconfig . Usage:git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"
Vinnie James
la source
17
⚠️ À utiliser git branch -Davec précaution dans un script, car il supprime de force une branche sans vérifier qu'elle a été fusionnée. Utilisez -dpour être en sécurité.
caesarsol
94

Suppression de branches

Supposons que notre travail sur la branche "formulaire de contact" soit terminé et que nous l'avons déjà intégré dans "master". Comme nous n'en avons plus besoin, nous pouvons le supprimer (localement):

$ git branch -d contact-form

Et pour supprimer la branche distante:

git push origin --delete contact-form
Ulysses Alves
la source
87

Supprimer la branche distante

git push origin :<branchname>

Supprimer la branche locale

git branch -D <branchname>

Supprimer les étapes de la branche locale:

  1. passer à une autre succursale
  2. supprimer la branche locale
jayxhj
la source
3
La suppression de la branche distante nécessite-t-elle par la suite "git push"?
Samitha Chathuranga
@SamithaChathuranga non, git push origin :<branchname>pousse déjà une branche «vide» vers la télécommande (donc supprime la branche distante)
Michał Szajbe
86

Dites simplement:

git branch -d <branch-name>
git push origin :<branch-name>
piyushmandovra
la source
Cela fonctionne si c'est votre propre branche. Mais si vous élaguez toutes les branches inutiles du repo (dont certaines ne sont pas les vôtres), cela ne suffira pas
Kermit_ice_tea
83
git push origin --delete <branch Name>

est plus facile à retenir que

git push origin :branchName
Smila
la source
81

Vous pouvez maintenant le faire avec l' application GitHub Desktop .

Après avoir lancé l'application

  1. Cliquez sur le projet contenant la branche
  2. Passer à la branche que vous souhaitez supprimer

    Branche de commutation

  3. Dans le menu "Branche", sélectionnez "Annuler la publication ...", pour supprimer la branche des serveurs GitHub.

    Branche non publiée

  4. Dans le menu "Branche", sélectionnez "Supprimer" nom_branche "..." pour que la branche soit supprimée de votre machine locale (AKA la machine sur laquelle vous travaillez actuellement)

    Supprimer la branche locale

Eric
la source
15
Je n'ai pas déçu, mais je pense que cela n'aide pas vraiment. La question demande évidemment une réponse de type plus en ligne de commande sans avoir à utiliser un programme externe, si les gens cliquaient ici, ils ne chercheraient probablement pas un github pour les méthodes de bureau.
Daemedeor
12
@Daemedeor, je suis en désaccord. En 2010, lorsque le PO a posé la question, la façon de procéder de l'interface utilisateur n'existait pas et la seule option était la ligne de commande. Pour indiquer que vous souhaitez une option de ligne de commande uniquement, elle doit être indiquée dans la question ou avec la balise, interface de ligne de commande , qui dans ce cas n'est pas présente.
Eric
3
La commande git pour supprimer une branche distante craint et j'ai tendance à l'oublier (nouvelle et ancienne). Heureusement, il existe des outils GUI qui ont la possibilité. Git Gui, TortoiseGit et GitHub Desktop l'ont - je souhaite que Git Extensions ait également cette fonctionnalité. Quoi qu'il en soit, ce dont je me souviens, c'est de démarrer Git Gui à partir de Git Extensions lorsque j'ai besoin de supprimer une branche distante.
vezenkov
81

C'est très simple:

Pour supprimer la branche distante

git push -d origin <branch-name>

Ou

git push origin :<branch-name>

Pour supprimer une branche locale

git branch -D <branch-name>
Vivek Maru
la source
2
J'avais besoin d'utiliser --deleteau lieu de -dsupprimer la branche distante.
ZakJ
-dL'option est un alias pour --deleteet si le --deletetravail -ddevrait alors aussi fonctionner, si vous voulez forcer la suppression d'une branche que vous pouvez utiliser à la -Dplace de -dou --delete.
Vivek Maru
78

Pour supprimer localement - (normal)

git branch -d my_branch

Si votre branche est en cours de rebasage / fusion et que cela n'a pas été fait correctement, cela signifie que vous obtiendrez une erreur Rebase/Merge in progress, donc dans ce cas, vous ne pourrez pas supprimer votre branche.

Donc, soit vous devez résoudre le rebasage / fusion. Sinon, vous pouvez forcer la suppression en utilisant,

git branch -D my_branch

Pour supprimer à distance :

git push --delete origin my_branch

Vous pouvez faire de même en utilisant:

git push origin :my_branch   # Easy to remember both will do the same.

Représentation graphique:

Entrez la description de l'image ici

Mohideen bin Mohammed
la source
68

Cela ne fonctionnera pas si vous avez une balise du même nom que la branche sur la télécommande:

$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to '[email protected]:SomeName/some-repo.git'

Dans ce cas, vous devez spécifier que vous souhaitez supprimer la branche, pas la balise:

git push origin :refs/heads/branch-or-tag-name

De même, pour supprimer la balise au lieu de la branche que vous utiliseriez:

git push origin :refs/tags/branch-or-tag-name
Greg
la source
1
C'est bien, mais les gens ne devraient vraiment pas nommer leurs branches et balises avec le même nom et le même schéma de nommage en premier lieu.
3
Eh bien, mon scénario était que je convertissais une branche en une balise et il était logique que la balise ait le même nom que la branche. En convertissant, je veux dire fusionner la branche B en A et étiqueter le dernier commit de la branche B avec la balise B afin qu'après avoir supprimé la branche B, il puisse toujours être facilement restauré en vérifiant simplement la balise B.
Greg
53

La plupart des autres réponses entraîneront des erreurs / avertissements. Cette approche est relativement indéréglable, bien que vous puissiez toujours en avoir besoin git branch -D branch_to_deletesi elle n'est pas entièrement fusionnée some_other_branch, par exemple.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

L'élagage à distance n'est pas nécessaire si vous avez supprimé la branche distante. Il n'est utilisé que pour obtenir les télécommandes les plus à jour disponibles sur un référentiel que vous suivez. J'ai observé git fetchva ajouter des télécommandes, pas les supprimer. Voici un exemple de quand git remote prune originfera réellement quelque chose:

L'utilisateur A effectue les étapes ci-dessus. L'utilisateur B exécuterait les commandes suivantes pour voir les branches distantes les plus à jour:

git fetch
git remote prune origin
git branch -r
Brandon Cook
la source
51

J'en ai eu marre de googler pour cette réponse, j'ai donc adopté une approche similaire à la réponse que crizCraig a postée plus tôt.

J'ai ajouté ce qui suit à mon profil Bash:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

Ensuite, chaque fois que j'en ai terminé avec une branche (fusionnée master, par exemple), j'exécute ce qui suit dans mon terminal:

gitdelete my-branch-name

... qui supprime ensuite my-branch-namede origintant ainsi que localement.

Arthurakay
la source
7
développer sur cela, --delete "$@"et -D "$@"au lieu de $1le gérer pour plusieurs branches.
kunl
3
Je suggère d'exécuter git branch -d(avec des «d» minuscules) d'abord pour s'assurer que les modifications ont été fusionnées, puis de pousser en cas de succès ( &&entre les commandes)
bryn
49

Avant d'exécuter

git branch --delete <branch>

assurez-vous de déterminer d'abord le nom exact de la branche distante en exécutant:

git ls-remote

Cela vous dira quoi saisir exactement pour la <branch>valeur. ( branchest sensible à la casse!)

jbooker
la source
46

Utilisation:

git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Si vous êtes sûr de vouloir le supprimer, exécutez

git branch -D bugfix

Maintenant, pour nettoyer les branches distantes supprimées, exécutez

git remote prune origin
utilisateur
la source