web-dev-qa-db-fra.com

Comment supprimer une branche Git localement et à distance?

Je veux supprimer une branche localement et à distance.

Échec des tentatives de suppression de la 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 supprimer avec succès la branche remotes/Origin/bugfix à la fois localement et à distance?

15136
Matthew Rankin

Résumé

$ git Push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>

Notez que dans la plupart des cas, le nom distant est Origin.

Supprimer une 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'option -d est un alias pour --delete, qui supprime la branche uniquement si elle a déjà été complètement fusionnée dans sa branche en amont. Vous pouvez également utiliser -D, qui est un alias de --delete --force, qui supprime la branche "quel que soit son statut fusionné". [Source: man git-branch]

Supprimer une succursale distante [Mis à jour le 8 sept. 2017]

À partir de Git v1.7.0 , vous pouvez supprimer une brancheremoteà l'aide de

$ 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 Push avec l’option -d 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 branche 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 - par exemple, vos collaborateurs et vous-même en avez fini avec une fonctionnalité et l'avez fusionnée dans la branche principale de votre télécommande (ou quelle que soit 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 correctif de serveur du serveur, exécutez la procédure suivante:

$ git Push Origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Boom. Plus de branche sur votre serveur. Vous voudrez peut-être parcourir cette page, car vous aurez besoin de cette commande et vous oublierez probablement la syntaxe. Une façon de se souvenir de cette commande consiste à rappeler la syntaxe git Push [remotename] [localbranch]:[remotebranch] que nous avons déjà évoquée un peu plus tôt. Si vous oubliez la partie [localbranch], vous dites en gros: «Ne prenez rien de mon côté et faites en _[remotebranch]».

J'ai publié git Push Origin :bugfix et cela a fonctionné à merveille. Scott Chacon avait raison - je voudrais une oreille de chien cette page (ou une oreille de chien en répondant à cette question dans Stack Overflow).

Ensuite, vous devriez l'exécuter sur d'autres machines

git fetch --all --Prune

propager les changements.

18919
Matthew Rankin

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

Pour supprimer unbranche localede votre ordinateur:

git branch -d {the_local_branch} (utilisez -D à la place pour forcer la suppression de la branche sans vérifier le statut fusionné)

Pour supprimer unbranche distantedu serveur:

git Push Origin --delete {the_remote_branch}

Référence: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote

3016
Eric Brotto

Les réponses courtes

Si vous souhaitez des explications plus détaillées sur les commandes suivantes, reportez-vous aux réponses détaillées dans la section suivante.

Supprimer une branche distante:

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

Supprimer 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 de suivi à distance locale:

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 branches différentes à supprimer!

Lors de la suppression de branches à la fois localement et à distance, gardez à l'esprit que 3 branches différentes sont 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 3 branches

L'affiche originale utilisée

git branch -rd Origin/bugfix

qui a seulement supprimé sa branche de suivi à distance locale Origin/bugfix, et non la branche distante réelle bugfix sur Origin.

Diagram 2

Pour supprimer cette branche distante réelle , vous avez besoin de

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.

Le fait de supprimer des branches distantes supprime également les branches de suivi à distance

Notez que la suppression de la branche distante X de la ligne de commande à l'aide d'un git Push supprime également la branche de suivi à distance locale Origin/X; il n'est donc pas nécessaire d'élaguer la branche obsolète de suivi à distance avec git fetch --Prune ou git fetch -p. ça 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ée en exécutant les opérations suivantes:

# 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 locale Origin/X

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

Un moyen typique de supprimer ces branches obsolètes de suivi à distance (depuis la version 1.6.6 de Git) consiste simplement à exécuter git fetch avec le --Prune ou le -p plus court. Notez que cela supprime toutes les branches obsolètes de suivi à distance locales 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 version 1.6.6 (souligné par moi):

"git fetch" appris --all et --multipleoptions, pour lancer la récupération depuis de nombreux référentiels, et--Prune pour supprimer les branches de suivi distantes devenues obsolètes. Cela rend "mise à jour distante git" et "prunissage distant git" moins nécessaires (il n'est pas prévu de supprimer "mise à jour distante" ni "élagage distant").

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

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

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

Voir également

1743
user456814

Étapes à suivre pour supprimer une branche:

Pour supprimer la branche distante:

git Push Origin --delete <your_branch> 

Pour supprimer la branche locale , vous avez trois façons :

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!

Il suffit de faire git Push Origin --delete dans supprimer votre branche distante UNIQUEMENT , ajouter le nom de la branche à la fin. Cette action sera supprimée et transmise à la télécommande en même temps ...

En outre, git branch -D, qui supprime simplement la branche localeUNIQUEMENT! ...

-D signifie --delete --force qui supprimera la branche même si elle n’a pas été fusionnée (suppression forcée), mais vous pouvez également utiliser -d qui signifie --delete qui jette une erreur respective du statut de fusion de la branche ...

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

 delete a remote and local branch in git

1234
Alireza

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

git Push --delete Origin serverfix

Qui fait la même chose que

git Push Origin :serverfix

mais il peut être plus facile de se souvenir.

746
pagetribe

Si vous souhaitez supprimer une branche, commencez par extraire à 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
357
Praveen Hiremath

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 de 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 font un 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.

352
pfrenssen
git branch -D <name-of-branch>
git branch -D -r Origin/<name-of-branch>
git Push Origin :<name-of-branch>
256
Felipe

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 la commande suivante:

git branch -d example

(ici example est le nom de la branche)

Et après cette suppression de la branche distante à l'aide de la commande:

git Push Origin :example
220
Syeful Islam

Une autre approche est: -

git Push --Prune Origin

AVERTISSEMENT: Ceci supprimera toutes les branches distantes qui n'existent pas localement. ou de manière plus complète,

git Push --mirror

fera en sorte que le référentiel distant ressemble à la copie locale du référentiel (les en-têtes locaux, les télécommandes et les balises sont dupliqués sur le système distant).

191
imanuelcostigan

J'utilise les éléments suivants dans mes Bash settings:

alias git-shoot="git Push Origin --delete"

Ensuite, vous pouvez appeler:

git-shoot branchname
160
crizCraig

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

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

128
Nacho Coloma

Si vous souhaitez exécuter ces deux étapes avec une seule commande, vous pouvez créer un alias en ajoutant le code ci-dessous à votre ~/.gitconfig:

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

Alternativement, vous pouvez ajouter ceci à votre configuration globale à partir de la ligne de commande en utilisant

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

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

119
Ryan Kohn

Supprimer localement:

Pour supprimer une branche locale, vous pouvez utiliser:

git branch -d <branch_name> 

Pour supprimer de force une branche, utilisez -D au 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 suggérerais que vous utilisiez la 2ème manière car elle est plus intuitive.

118
Rahul Gupta

Pour supprimer votre succursale localement et à distance

  • Passer à la branche principale - git checkout master

  • Supprimer votre branche distante - git Push Origin --delete <branch-name>

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

111
mfathy00

Vous pouvez aussi le faire en utilisant git remote Prune Origin

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

Il élague et supprime les branches de suivi à distance d'une liste git branch -r.

106
nickleefly

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

grb delete branch

Je constate que j'utilise aussi assez souvent les commandes publish et track

102
u2622

Une ligne commande delete locale et distante :

D=branch-name; git branch -D $D; git Push Origin :$D

ou ajoutez l'alias ci-dessous à votre ~/.gitconfig ; utilisation: git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git Push Origin --delete \"$1\"; };f"
92
Vinnie James

Suppression de branches

Supposons que notre travail sur la "fiche de contact" de branche est terminé et que nous l'avons déjà intégré dans "maître". Puisque 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
90
Ulysses Alves

Supprimer une 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 une branche locale
86
jayxhj

Dites simplement:

git branch -d <branch-name>
git Push Origin :<branch-name>
85
piyushmandovra

Maintenant, vous pouvez le faire avec GitHub Desktop app.

Après avoir lancé l'application

  1. Cliquez sur le projet contenant la branche
  2. Basculez vers la branche que vous souhaitez supprimer  switching branch
  3. Dans le menu "Branch", sélectionnez "Unpublish ..." pour supprimer la branche des serveurs GitHub.  unpublish branch
  4. Dans le menu "Branch", sélectionnez "Supprimer" branch_name "..." pour que la branche soit supprimée de votre machine locale (c'est-à-dire la machine sur laquelle vous travaillez actuellement)  delete local branch
79
Eric
git Push Origin --delete <branch Name>

est plus facile à retenir que

git Push Origin :branchName
78
Smila

Pour supprimer localement - (Normal),

git branch -d my_branch

Si votre branche est en train de rebaser/fusionner la progression et que cela n'a pas été fait correctement, vous obtiendrez une erreur Rebase/Merge in progress. Dans ce cas, vous ne pourrez pas supprimer votre branche.

Donc, soit votre besoin de résoudre le rebasage/fusion, sinon vous pouvez forcer la suppression en utilisant,

git branch -D my_branch

Pour supprimer dans Remote:

git Push --delete Origin my_branch

peut faire la même chose en utilisant,

git Push Origin :my_branch   # easy to remember both will do the same.

Représentation graphique,

 enter image description here

73
Silent Spectator

Cela ne fonctionnera pas si vous avez une étiquette portant le même nom que la branche de 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 à la place de la branche, vous utiliseriez:

git Push Origin :refs/tags/branch-or-tag-name
64
Amiramix

Beaucoup d'autres réponses conduiront à des erreurs/avertissements. Cette approche est relativement infaillible bien que vous ayez peut-être encore besoin de git branch -D branch_to_delete s'il n'est pas complètement fusionné dans 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 est uniquement utilisé pour obtenir les télécommandes les plus récentes disponibles sur un référentiel que vous suivez. J'ai observé que git fetch va ajouter des télécommandes, pas les supprimer. Voici un exemple de moment où git remote Prune Origin fera réellement quelque chose:

L'utilisateur A effectue les étapes ci-dessus. L'utilisateur B doit exécuter les commandes suivantes pour afficher les branches distantes les plus récentes.

git fetch
git remote Prune Origin
git branch -r
50
Brandon Cook

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

Ajout de ce qui suit à mon profil Bash:

function gitdelete(){
    git Push Origin --delete $1
    git branch -D $1
}

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

gitdelete my-branch-name

... qui supprime ensuite my-branch-name de Origin ainsi que localement.

49
arthurakay

Avant d'exécuter

git branch --delete <branch>

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

git ls-remote

Cela vous indiquera quoi entrer EXACTEMENT pour la valeur <branch>. (branch est sensible à la casse!)

45
joey
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, lancez

git branch -D bugfix

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

git remote Prune Origin
44
Vivek

Mashup de toutes les autres réponses. Nécessite Ruby 1.9.3+, testé seulement sur OS X.

Appelez ce fichier git-remove, rendez-le exécutable et mettez-le dans votre chemin. Ensuite, utilisez, par exemple, git remove temp.

#!/usr/bin/env Ruby
require 'io/console'

if __FILE__ == $0
      branch_name = ARGV[0] if (ARGV[0])
      print "Press Y to force delete local and remote branch #{branch_name}..."
    response = STDIN.getch
    if ['Y', 'y', 'yes'].include?(response)
      puts "\nContinuing."
      `git branch -D #{branch_name}`
      `git branch -D -r Origin/#{branch_name}`
      `git Push Origin --delete #{branch_name}` 
    else
      puts "\nQuitting."
    end
end
43
Dan Rosenstark

J'ai ajouté les alias suivants à mon fichier .gitconfig. Cela me permet de supprimer des branches avec ou sans spécifier le nom de la branche. Le nom de la branche est défini par défaut sur la branche actuelle si aucun argument n'est transmis.

[alias]
    branch-name = rev-parse --abbrev-ref HEAD     

    rm-remote-branch = !"f() { branch=${1-$(git branch-name)}; git Push Origin :$branch; }; f"
    rm-local-branch = !"f() { branch=${1-$(git branch-name)}; git checkout master; git branch -d $branch; }; f"
    rm-branch-fully = !"f() { branch=${1-$(git branch-name)}; git rm-local-branch $branch; git rm-remote-branch $branch; }; f"
39
Jared Knipp

Une option alternative à la ligne de commande pour la suppression de branches distantes est la page de branches GitHub .

Voir par exemple: https://github.com/angular/angular.js/branches

Trouvé dans la page Code -> Branches d'un référentiel GitHub.

Je préfère généralement la ligne de commande moi-même, mais cette page GitHub contient beaucoup plus d'informations sur les branches, telles que la date de dernière mise à jour et l'utilisateur , et le nombre de commits à venir et à venir . C'est utile lorsque vous traitez avec un grand nombre de branches.

31
Bradley Flood

J'ai également eu des problèmes similaires, et cela semble fonctionner: Cela supprime la branche locale. git branch -d the_local_branch

Cela supprime la branche distante git Push Origin :the_remote_branch

Source: Makandra Cards

30
Srijan Karki

La réponse est bonne, mais, dans le cas où vous auriez une tonne de branches, les supprimer une par une localement et à distance serait une tâche fastidieuse. Vous pouvez utiliser ce script pour automatiser ces tâches.

branch_not_delete=( "master" "develop" "our-branch-1" "our-branch-2")


for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do

    # delete prefix remotes/Origin/ from branch name
    branch_name="$(awk '{gsub("remotes/Origin/", "");print}' <<< $branch)"

    if ! [[ " ${branch_not_delete[*]} " == *" $branch_name "* ]]; then
        # delete branch remotly and locally
        git Push Origin :$branch_name
    fi
done 
  • Lister les branches que vous ne voulez pas supprimer
  • Parcourez les télécommandes et si elles ne figurent pas dans notre "liste de conservation", nous les avons supprimées.

Source: enlevant-git-branches-at-once

28
levi

En utilisant GitBash vous pouvez exécuter les tâches suivantes:

git branch --delete <branch>

OR

Depuis l'application de bureau GitHub, lorsque la branche est extraite, vous pouvez supprimer la branche Local via la barre de menus Branch:

 enter image description here

Si vous ARE NOT en utilisant l'application de bureau GitHub et que vous utilisez un IDE comme Visual Studio pour votre contrôle de source local, il vous suffit de procéder en quelques étapes rapides:

  1. Découvrez une branche autre que celle que vous souhaitez supprimer.
  2. Cliquez avec le bouton droit sur la branche que vous souhaitez supprimer.
  3. Sélectionnez l'option Supprimer dans le menu contextuel.

Ensuite, une fois connecté à votre compte GitHub en ligne, accédez au référentiel et cliquez sur l'onglettoutes les branches. À partir de là, il vous suffit de cliquer sur la petite icône de corbeille située à droite du nom du brach à supprimer.

 enter image description here

* N'oubliez pas que si la branche n'est pas publiée, vous n'avez pas besoin de la supprimer de votre référentiel en ligne.

23
Uchiha Itachi

J'ai créé la fonction pratique suivante dans mon fichier .bash_aliases:

git-delete-branch() 
{ 
    if [[ -n $1 ]]; then
        git checkout master > /dev/null;
        branch_name="$1";
        echo "Deleting local $branch_name branch...";
        git branch -D "$branch_name";
        echo "Deleting remote $branch_name branch...";
        git Push Origin --delete "$branch_name";
        git remote Prune Origin;
        echo "Your current branches are:";
        git branch -a;
    else
        echo "Usage: git-delete-branch <branch_name>";
    fi
}
19
Vagelis Prokopiou

Selon le dernier document utilisant terminal, nous pouvons supprimer le chemin suivant.

supprimer en local:

git branch -D usermanagement

supprimer dans un emplacement distant:

git Push --delete Origin usermanagement
19
KARTHIKEYAN.A

C'est très simple

Pour supprimer une branche distante

git Push -d Origin <branch-name>

OR

git Push Origin :<branch-name>

Pour supprimer une branche locale

git branch -D <branch-name>
15
Vivek Maru