18004 votes

Comment supprimer une branche Git à la fois localement et à distance?

Je veux supprimer une branche à la fois localement et sur mon projet à distance fork sur GitHub.

Supprimé Avec Succès Branche Locale

$ git branch -D bugfix
Deleted branch bugfix (was 2a14ef7).

Tente de Supprimer à Distance

$ 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/bugfix de la branche à la fois localement et sur GitHub?

22618voto

Matthew Rankin Points 71628

Mise à jour de la Réponse, le 1er Février 2012

Comme de Git v1.7.0, vous pouvez supprimer une distance de branche de l'aide

git push origin --delete <branchName>

ce qui est plus facile à retenir qu'

git push origin :<branchName>

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

Par conséquent, la version de Git que vous avez installé va dicter si vous avez besoin d'utiliser le plus facile ou plus difficile de la syntaxe.

Réponse originale à cette question à partir de 5-Jan-2010

À partir du Chapitre 3 de Pro Git Scott Chacon:

Suppression À Distance Des Branches

Supposons que vous avez terminé avec une branche distante - dire, vous et vos collaborateurs sont finis avec une fonctionnalité et ont fusionné dans votre télécommande branche master (ou quelle que soit la direction de votre version stable). Vous pouvez supprimer une branche distante à l'aide de la plutôt obtus syntaxe git push [remotename] :[branch]. Si vous souhaitez supprimer votre serverfix branche à partir du serveur, vous exécutez les opérations suivantes:

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

Boom. Pas plus branche sur votre serveur. Vous souhaitez peut-être le chien de l'oreille de cette page, car vous aurez besoin de la commande, et vous aurez probablement oublier la syntaxe. Une façon de se souvenir de cette commande est en rappelant l' git push [remotename] [localbranch]:[remotebranch] de la syntaxe que nous sommes allés un peu plus tôt. Si vous partez hors de l' [localbranch] partie, puis, vous êtes essentiellement en disant: "ne Prenez rien de mon côté et de la [remotebranch]."

J'ai lancé git push origin :bugfix et il a fonctionné à merveille. Scott Chacon avait raison-je veux de l'oreille de chien de la page (ou presque oreille de chien en répondant à ce sur Stack Overflow).

3457voto

Eric Brotto Points 11383

Matthieu réponse est idéal pour la suppression à distance des branches et j'apprécie également l'explication, mais pour faire une distinction simple entre deux commandes:

Pour supprimer une branche locale de votre machine:

git branch -d the_local_branch

Pour supprimer une branche distante:

git push origin :the_remote_branch

*Prises à partir d'ici: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote

2175voto

Cupcake Points 22154

Les Réponses Courtes

Si vous voulez des explications plus détaillées des commandes suivantes, puis voir le long de réponses dans la section suivante.

La suppression d'une branche à distance:

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

La suppression d'une branche locale:

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

La suppression d'un local distant de suivi de la direction de la

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

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

La Réponse Longue: il y a 3 différentes branches à supprimer!

Lorsque vous faites affaire avec la suppression des branches à la fois localement et à distance, gardez à l'esprit qu' il y a 3 différentes directions générales concernées:

  1. La branche locale X.
  2. La distance de l'origine de la branche X.
  3. Le local distant de suivi de la succursale origin/X qui suit la branche distante X.

Visualization of 3 branches

L'original de l'affiche

git branch -rd origin/bugfix

qui ne supprimé son local distant de suivi de la succursale origin/bugfix, et non pas la distance réelle de la branche bugfix sur origin.

Diagram 2

Pour supprimer effective de la branche distante, vous devez

git push origin --delete bugfix

Diagram 3

Plus De Détails

Les sections suivantes décrivent d'autres aspects à prendre en compte lors de la suppression de votre télécommande à distance et de suivi des branches.

En poussant à supprimer les branches distantes supprime également à distance de suivi des branches

À noter que la suppression de la branche distante X à partir de la ligne de commande à l'aide d'un git push va également supprimer le local distant de suivi de la succursale origin/X, de sorte qu'il n'est pas nécessaire de tailler le obsolète à distance de suivi de la direction, avec git fetch --prune ou git fetch -p, bien qu'il ne ferait pas de mal si vous n'avez de toute façon.

Vous pouvez vérifier que la distance de suivi de la succursale 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

L'élagage des obsolète local distant de suivi de la branche origin/X

Si vous ne supprimez pas votre branche distante X à partir de la ligne de commande (comme ci-dessus), votre repo contient toujours (aujourd'hui obsolète) à distance-le suivi de la succursale origin/X. Cela peut se produire si vous avez supprimé une branche distante directement par le biais de l'interface web de GitHub, par exemple.

D'une manière typique pour supprimer ces obsolète à distance-suivi des branches (depuis Git version 1.6.6) est de simplement exécuter git fetch avec l' --prune ou plus courts -p. Notez que cette opération supprime toutes obsolètes local distant de suivi de branches pour toutes les branches qui n'existent plus sur la télécommande:

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

Voici la citation de la 1.6.6 notes de version (l'emphase est mienne):

"git fetch" appris --all et --multipleoptions, pour courir chercher à partir de beaucoup de dépôts, et --prune option de suppression de suivi à distance les branches qui sont allés vicié. Ceux-ci font "git remote update" et "git distance prune" moins nécessaire (il n'y a pas de plan pour supprimer "à distance mise à jour", ni "à distance prune", tout de même).

La variante ci-dessus automatique de la taille de obsolète à distance-suivi des branches

Alternativement, au lieu de la taille de votre obsolètes local distant de suivi des caisses git fetch -p, vous pouvez éviter de faire le supplément de l'exploitation du réseau par juste de supprimer manuellement la direction générale(es) avec l' --remote ou -r drapeaux:

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

Voir Aussi

833voto

pagetribe Points 5071

Vous pouvez également utiliser la syntaxe suivante pour supprimer la branche distante

git push --delete origin serverfix

qui fait la même chose que

git push origin :serverfix

mais peut-être plus facile à retenir.

387voto

pfrenssen Points 1293

Astuce: Lorsque vous supprimez les 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és. Même si la direction générale est réellement supprimé sur la télécommande, les références à celui-ci existe encore dans les dépôts locales de membres de votre équipe. Cela signifie que pour les autres membres de l'équipe de l'supprimé les branches sont encore visibles quand ils font un git branch -a.

Pour résoudre ce les membres de votre équipe pouvez le tailler le supprimé les branches avec

git remote prune <repository>

c'est typiquement git remote prune origin.

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