remote - git rename branch




Comment supprimer une branche Git localement et à distance? (20)

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

É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 fois localement et sur GitHub?


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. origin/X branche de suivi à distance locale qui suit la branche X distante.

L'affiche originale utilisée

git branch -rd origin/bugfix

qui a seulement supprimé son origin/bugfix branche de suivi à distance locale , et non le bugfix branche réelle sur l' origin .

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

git push origin --delete bugfix

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 supprimera également l' origin/X branche de suivi à distance locale . Il n'est donc pas nécessaire d'élaguer la branche obsolète de suivi à distance avec git fetch --prune ou git fetch -p , bien que ça ne ferait pas de mal si tu le faisais quand même.

Vous pouvez vérifier que l' origin/X branche de suivi à distance a également été supprimée en procédant comme 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 X de la ligne de commande (comme ci-dessus), votre référentiel local contiendra toujours (maintenant obsolète) l' origin/X branche de suivi à distance origin/X Cela peut arriver si vous avez supprimé 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 l' --prune ou -p . 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 publication 1.6.6 (l'emphase est mise sur moi):

"git fetch" a appris les options --all et --multiple , pour exécuter l'extraction depuis de nombreux référentiels, et l' option --prune pour supprimer les branches de suivi distantes --prune obsolètes. Celles-ci font que "mise à jour distante git" et "élagage distant git" sont moins nécessaires (cependant, 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 de suivi à distance locales obsolètes via git fetch -p , vous pouvez éviter d'effectuer l'opération supplémentaire sur le réseau en supprimant simplement la ou les branches avec les --remote ou -r :

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

Voir également


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 l’ 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 ne supprime la branche que si elle a déjà été complètement fusionnée dans sa branche en 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 une succursale distante [Mis à jour le 8 sept. 2017]

A partir de 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 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 en ayez fini avec une branche distante - par exemple, vos collaborateurs et vous-même en avez terminé 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 serverfix 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 est de rappeler la git push [remotename] [localbranch]:[remotebranch] que nous avons déjà git push [remotename] [localbranch]:[remotebranch] un peu plus tôt. Si vous laissez de côté la partie [localbranch] , alors vous dites essentiellement: «Ne prenez rien de mon côté et faites en sorte que ce soit [remotebranch] ».

J'ai publié git push origin :bugfix et cela a fonctionné à merveille. Scott Chacon avait raison - je voudrai m'entendre sur cette page (ou sur l'oreille en répondant à ).

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

git fetch --all --prune

propager les changements.


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 de <branch> . (la branch est sensible à la casse!)


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 si elle n'est pas entièrement fusionnée 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 ajoutera des télécommandes, pas les supprimera. Voici un exemple de cas où git remote prune origin fera 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

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 au lieu de la branche, vous utiliseriez:

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

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 une 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>

Ceci est typiquement git remote prune origin


Dites simplement:

git branch -d <branch-name>
git push origin :<branch-name>

En plus des autres réponses, j'utilise souvent l'outil git_remote_branch . C'est une installation supplémentaire, mais elle 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 .


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

La réponse de Matthew est excellente pour supprimer des 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 -D place 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: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote


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 branche locale - git branch --delete <branch-name>


Si vous souhaitez compléter ces deux étapes avec une seule commande, vous pouvez créer un alias en ajoutant le ~/.gitconfig 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'

REMARQUE : 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).


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

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 mis en miroir sur le système distant).


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.


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. Basculer vers la branche que vous souhaitez supprimer
  3. Dans le menu "Branch", sélectionnez "Unpublish ..." pour supprimer la branche des serveurs GitHub.
  4. Dans le menu "Branche", sélectionnez "Supprimer" nom de branche "..." pour supprimer la branche de votre ordinateur local (c'est-à-dire l'ordinateur sur lequel vous travaillez actuellement).

Pour supprimer localement - (Normal),

git branch -d my_branch

Si votre branche en cours de rebasage / fusion et que cela n'a pas été fait correctement signifie que 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,


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.


git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

git push origin --delete branchName

est plus facile à retenir que

git push origin :branchName




git-remote