Git: mise à jour des informations de branche distante

125

Dans un référentiel git, une branche distante dont je ne suis pas le suivi a été supprimée. Quand je tape

git branch -r

la branche supprimée apparaît toujours (et je peux la vérifier)

Quelle commande git dois-je exécuter pour mettre à jour ces informations?

Bain Markev
la source

Réponses:

39

Si vous effectuez quelque chose comme

git branch -d -r remote_name/branch_name

vous supprimez uniquement votre paiement local. Cette commande ne fait rien au référentiel distant, c'est pourquoi elle apparaît toujours.

Solution:

git push origin :branch_name

supprimera la branche distante (notez le ':'), et

git branch -d branch_name

supprimera votre paiement local.

( Référence )

Garrett Hyde
la source
146
Vous pouvez également exécuter 'git remote prune origin' pour nettoyer vos références distantes.
cmcginty
3
Cela supprimera toutes les branches qui ne sont plus suivies par le référentiel distant. Alors, faites attention.
Garrett Hyde
4
Je pense qu'il est également utile de savoir que, bien qu'un peu plus verbeux, vous pouvez également utiliser git push <remote> --delete <branchname>pour supprimer des branches distantes.
AeroCross
Cela fonctionne généralement, mais je suis tombé sur une situation aujourd'hui où la liste distante n'était pas mise à jour, alors j'essayais de supprimer une branche qui n'était pas là. Ainsi, la solution de @Flo ci-dessous était requise en premier.
dgo
284

Si ce sont des branches du référentiel distant qui ont été supprimées et que vous souhaitez mettre à jour toutes les branches locales de suivi à distance en même temps, vous pouvez utiliser

$ git remote prune <remotename>

pour supprimer toutes les branches de suivi à distance périmées pour une télécommande donnée (c'est-à-dire celles qui suivent les branches qui ont été supprimées dans le référentiel distant).

Consultez la git remotedocumentation.

Jakub Narębski
la source
Merci @Casey et @Jakub pour vos réponses! Comment se fait-il que les informations de la succursale distante stockées localement ne soient pas mises à jour lors de ma prochaine utilisation git fetch?
JJD
4
@JJD: Parce que vous avez peut-être basé votre travail sur une branche distante qui n'est plus ici. On a donc pensé que disparaître sans demander était une mauvaise idée. C'est pourquoi vous devez explicitement élaguer les branches de suivi à distance.
Jakub Narębski
"Git gc" nettoie-t-il aussi les branches distantes obsolètes?
James Wald
@JamesWald: Non, ce n'est pas le cas. git gcemballe simplement des objets et des références, et supprime les objets non référencés pendant qu'il y est (avec une certaine marge de sécurité).
Jakub Narębski
186
git remote update --prune

Devrait actualiser toutes les branches des télécommandes, en ajouter de nouvelles et en supprimant celles qui ont été supprimées.

Edit: La commande de mise à jour à distance récupère essentiellement la liste des branches sur la télécommande. L' --pruneoption supprimera vos branches de suivi à distance locales qui pointent vers des branches qui n'existent plus sur la télécommande .

Flo
la source
Cela a fonctionné pour moi. J'avais besoin de supprimer une branche distante qui, pour une raison quelconque, n'a pas pu être supprimée par l'habituel 'git push origin: <branch_name>'
n0denine
Serait-il exact de dire que cette réponse fait ce que fait la réponse de Jakub Narębski et plus encore? Autrement dit, il élague et récupère les mises à jour?
Frank Tan
14

Également utile pour voir les nouvelles branches distantes:

git fetch --all
Aidan Donohoe
la source
Cela m'a beaucoup aidé. Un bogue dans Visual studio git empêche d'afficher les nouvelles branches créées après le clonage. Cette commande aide à montrer les nouvelles branches
Venkatesh Muniyandi
nice n simple thx mec, avoir un badge de réponse en bronze sur la maison :)
danday74
2

Vous pouvez combiner les indicateurs -ret -dpour supprimer les branches distantes.

mikerobi
la source
super conseil! cependant, dans ce cas, il y a plusieurs branches qui ont déjà été supprimées, il existe sûrement une commande pour récupérer ces mises à jour
Bain Markev
2

Essayez cette commande

git gc --prune=now
MarceloCouto
la source