Je veux supprimer une twig à la fois localement et sur mon fork de projet distant sur GitHub .
$ 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 twig remotes/origin/bugfix
fois localement et sur GitHub?
$ git push --delete $ git branch -d
Notez que dans la plupart des cas, le nom distant est l’ origin
.
Pour supprimer la twig locale , utilisez l’une des options suivantes:
$ git branch -d branch_name $ git branch -D branch_name
Remarque: L’option -d
est un alias pour --delete
, qui ne supprime la twig que si elle a déjà été entièrement fusionnée dans sa twig en amont. Vous pouvez également utiliser -D
, qui est un alias pour --delete --force
, qui supprime la twig “indépendamment de son statut fusionné”. [Source: man git-branch
]
A partir de Git v1.7.0 , vous pouvez supprimer une twig distante en utilisant
$ git push --delete
qui pourrait être plus facile à retenir que
$ git push :
qui a été ajouté dans Git v1.5.0 “pour supprimer une twig distante ou un tag.”
À 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.
Du chapitre 3 de Pro Git par Scott Chacon:
Suppression de twigs distantes
Supposons que vous ayez terminé avec une twig distante. Par exemple, vous et vos collaborateurs avez terminé avec une fonctionnalité et l’avez intégrée dans la twig principale de votre télécommande (ou dans la twig dans laquelle se trouve votre codeline stable). Vous pouvez supprimer une twig distante en utilisant la syntaxe plutôt obtuse
git push [remotename] :[branch]
. Si vous souhaitez supprimer votre twig serverfix du serveur, vous exécutez les opérations suivantes:$ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix
Boom. Plus de twig sur votre serveur. Vous voudrez peut-être écouter 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 parcourue un peu plus tôt. Si vous[localbranch]
partie[localbranch]
, alors vous dites essentiellement: «Ne prenez rien de mon côté et faites-le[remotebranch]
».
J’ai publié git push origin :bugfix
et cela fonctionnait parfaitement. Scott Chacon avait raison: je voudrais avoir cette page (ou quasiment l’oreille d’un chien en répondant à ceci sur Stack Overflow).
Ensuite, vous devriez l’exécuter sur d’autres machines
git fetch --all --prune
pour propager les changements.
La réponse de Matthew est excellente pour supprimer les twigs distantes et j’apprécie également l’explication, mais pour faire une distinction simple entre les deux commandes:
Pour supprimer une twig locale de votre machine:
git branch -d {the_local_branch}
(utilisez -D
place pour forcer la suppression de la twig sans vérifier le statut de la fusion)
Pour supprimer une twig 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
Si vous souhaitez des explications plus détaillées sur les commandes suivantes, consultez les longues réponses dans la section suivante.
Supprimer une twig distante:
git push origin --delete # Git version 1.7.0 or newer git push origin : # Git versions older than 1.7.0
Supprimer une twig locale:
git branch --delete git branch -d # Shorter version git branch -D # Force delete un-merged twigs
Suppression d’une twig de suivi à distance locale:
git branch --delete --remotes / git branch -dr / # Shorter git fetch --prune # Delete multiple obsolete tracking twigs git fetch -p # Shorter
Lorsque vous supprimez des twigs à la fois localement et à distance, gardez à l’esprit qu’il y a 3 twigs différentes impliquées :
X
X
origin/X
twig de suivi à distance locale qui suit la twig distante X
L’affiche originale utilisée
git branch -rd origin/bugfix
qui a seulement supprimé l’ origin/bugfix
twig de suivi à distance locale , et non le bugfix
twig distante à l’ origin
.
Pour supprimer cette succursale distante , vous avez besoin de
git push origin --delete bugfix
Les sections suivantes décrivent des détails supplémentaires à prendre en compte lors de la suppression de vos twigs distantes et de suivi à distance.
Notez que la suppression de la twig distante X
partir de la ligne de commande en utilisant git push
supprime également l’ origin/X
twig de suivi à distance locale . Il n’est donc pas nécessaire d’élaguer la twig de suivi à distance obsolète avec git fetch --prune
ou git fetch -p
, mais ça ne ferait pas de mal si tu le faisais quand même.
Vous pouvez vérifier que l’ origin/X
twig de suivi à distance a également été supprimée en exécutant les opérations suivantes:
# View just remote-tracking twigs git branch --remotes git branch -r # View both ssortingctly local as well as remote-tracking twigs git branch --all git branch -a
Si vous n’avez pas supprimé votre twig X
distante de la ligne de commande (comme ci-dessus), votre référentiel local contiendra toujours l’ origin/X
twig de suivi à distance (désormais obsolète). Cela peut se produire si vous avez supprimé une twig distante directement via l’interface Web de GitHub, par exemple.
Une façon typique de supprimer ces twigs de suivi à distance obsolètes (depuis la version 1.6.6 de Git) consiste à exécuter simplement git fetch
avec l’ --prune
ou encore --prune
-p
. Notez que cela supprime toutes les twigs locales de suivi à distance obsolètes pour toutes les twigs 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 (accent mis sur le mien):
“git fetch”
--multiple
options--all
et--multiple
, pour exécuter l’extraction de nombreux référentiels et l’ option--prune
pour supprimer les twigs de suivi distantes--prune
obsolètes. Celles-ci rendent moins nécessaire la “mise à jour à distance de git” et la “élimination à distance de git” (il n’est pas prévu de supprimer “mise à jour à distance”, ni “élagage à distance”).
Alternativement, au lieu d’élaguer vos twigs locales de suivi à distance obsolètes via git fetch -p
, vous pouvez éviter d’effectuer l’opération réseau supplémentaire en supprimant manuellement la ou les twigs avec les --remote
ou -r
:
git branch --delete --remotes origin/X git branch -dr origin/X # Shorter
pour supprimer la twig distante:
git push origin --delete
pour supprimer la twig locale , vous avez trois possibilités:
1: git branch -D 2: git branch --delete --force //same as -D 3: git branch --delete //error on unmerge
Expliquez: OK, expliquez simplement ce qui se passe ici!
Il suffit de faire git push origin --delete
pour supprimer votre twig distante UNIQUEMENT , append le nom de la twig à la fin et cela va supprimer et le pousser à distance en même temps …
En outre, git branch -D
, qui supprime simplement la twig locale UNIQUEMENT ! …
-D
signifie --delete --force
qui supprimera la twig même si elle n’est pas fusionnée (force delete), mais vous pouvez aussi utiliser -d
qui signifie --delete
qui --delete
une erreur respective de l’état de fusion de twig …
Je crée également l’image ci-dessous pour montrer les étapes:
Vous pouvez également utiliser les éléments suivants pour supprimer la twig distante.
git push --delete origin serverfix
Qui fait la même chose que
git push origin :serverfix
mais cela peut être plus facile à retenir.
Si vous souhaitez supprimer une twig, vérifiez d’abord la twig autre que la twig à supprimer.
git checkout other_than_branch_to_be_deleted
Supprimer la twig locale:
git branch -D branch_to_be_deleted
Suppression de la twig distante:
git push origin --delete branch_to_be_deleted
Astuce: lorsque vous supprimez des twigs en utilisant
git branch -d # deletes local branch
ou
git push origin : # deletes remote branch
seules les références sont supprimées. Même si la twig est effectivement 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 twigs 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 twigs supprimées avec
git remote prune
C’est généralement git remote prune origin
.
git branch -D git branch -D -r origin/ git push origin :
C’est simple: lancez simplement la commande suivante:
Pour supprimer une twig Git à la fois localement et à distance, commencez par supprimer la twig locale à l’aide de la commande:
git branch -d example
(ici, le nom de la twig)
Et après cela, supprimez la twig distante en utilisant la commande:
git push origin :example
Une autre approche est
git push --prune origin
ATTENTION: Ceci supprimera toutes les twigs distantes qui n’existent pas localement. Ou plus globalement,
git push --mirror
fera en sorte que le repository distant ressemble à la copie locale du référentiel (les têtes locales, les télécommandes et les balises sont mises en miroir à distance).
J’utilise les éléments suivants dans mes parameters Bash :
alias git-shoot="git push origin --delete"
Ensuite, vous pouvez appeler:
git-shoot branchname
Depuis janvier 2013, GitHub a ajouté un bouton Supprimer une twig à côté de chaque twig de votre page “Branches”.
Article de blog pertinent: Créer et supprimer des twigs
Si vous souhaitez effectuer ces deux étapes avec une seule commande, vous pouvez 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 append 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 twig ne sera supprimée que si elle a été fusionnée. Pour forcer la suppression, vous devrez utiliser -D
(D majuscule).
Pour supprimer votre twig localement et à distance
Commander à la twig principale – Master Checkout git checkout master
Supprimez votre twig distante – git push origin --delete
Supprimez votre twig locale – twig git branch --delete
Supprimer localement:
Pour supprimer une twig locale, vous pouvez utiliser:
git branch -d branch_name
Pour supprimer une twig de force, 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 vous suggère d’utiliser la 2ème manière car c’est plus intuitif.
Vous pouvez également le faire en utilisant git remote prune origin
:
$ git remote prune origin Pruning origin URL: git@example.com/yourrepo.git * [pruned] origin/some-branchs
Il élague et supprime les twigs de suivi à distance à partir d’une liste git branch -r
.
En plus des autres réponses, j’utilise souvent l’outil git_remote_branch . C’est une installation supplémentaire, mais cela vous permet d’interagir facilement avec les succursales distantes. Dans ce cas, supprimer:
grb delete branch
Je trouve que j’utilise aussi souvent les commandes de publish
et de track
.
Supprimer des twigs
Supposons que notre travail sur la twig “contact-form” 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 twig distante:
git push origin --delete contact-form
Une commande liner supprime à la fois 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"
Supprimer une twig distante
git push origin :
Supprimer une twig locale
git branch -D
Supprimer les étapes de la twig locale:
Dites simplement:
git branch -d git push origin :
Maintenant, vous pouvez le faire avec l’application GitHub Desktop .
Après avoir lancé l’application
Pour supprimer localement – (Normal),
git branch -d my_branch
Si votre twig dans le réaménagement / fusion progresse 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 twig.
Donc soit vous avez besoin de résoudre le rebasage / la fusion, sinon vous pouvez forcer Supprimer 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,
git push origin --delete branchName
est plus facile à retenir que
git push origin :branchName
Cela ne fonctionnera pas si vous avez une balise avec le même nom que la twig 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 'git@github.com:SomeName/some-repo.git'
Dans ce cas, vous devez spécifier que vous souhaitez supprimer la twig, pas la balise:
git push origin :refs/heads/branch-or-tag-name
De même, pour supprimer la balise au lieu de la twig que vous utiliseriez:
git push origin :refs/tags/branch-or-tag-name
La plupart des autres réponses entraîneront des erreurs / avertissements. Cette approche est relativement infaillible bien que vous ayez toujours besoin de git branch -D branch_to_delete
si elle n’est pas complètement 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 twig distante. Il est utilisé uniquement pour obtenir les télécommandes les plus récentes disponibles sur un repo que vous suivez. J’ai remarqué que git fetch
va append des télécommandes, pas les supprimer. Voici un exemple de quand git remote prune origin
fera réellement quelque chose:
L’utilisateur A effectue les étapes ci-dessus. L’utilisateur B exécutera les commandes suivantes pour voir les twigs distantes les plus récentes
git fetch git remote prune origin git branch -r
J’en ai eu marre de googler pour cette réponse, alors j’ai adopté une approche similaire à la réponse que crizCraig a affiché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 twig (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 my-branch-name
d’ origin
aussi bien que localement.
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 twigs distantes supprimées, exécutez
git remote prune origin
Avant d’exécuter
git branch --delete
assurez-vous de déterminer d’abord le nom EXACT de la twig distante en exécutant:
git ls-remote
Cela vous dira quoi entrer EXACTEMENT pour la valeur
. (la branch
est sensible à la casse!)
Mashup de toutes les autres réponses. Nécessite Ruby 1.9.3+, testé uniquement sur OS X.
Appelez ce fichier git-remove
, rendez-le exécutable et placez-le dans votre chemin. Utilisez ensuite, 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