web-dev-qa-db-fra.com

récupérer de l'origine avec les branches distantes supprimées?

Quand je fais git fetch Origin et que Origin a une branche supprimée, il ne semble pas la mettre à jour dans mon référentiel. Quand je fais git branch -r, il affiche toujours Origin/DELETED_BRANCH.

Comment puis-je réparer cela?

394
Chris Muench

Vous devez faire ce qui suit

git fetch -p

Cela mettra à jour la base de données locale des branches distantes.

717
Pavan Yalamanchili

De http://www.gitguys.com/topics/adding-and-removing-remote-branches/

Une fois que quelqu'un aura supprimé une branche d'un référentiel distant, git ne supprimera pas automatiquement les branches du référentiel local lorsqu'un utilisateur effectuera une extraction ou une extraction git. Toutefois, si l'utilisateur souhaite supprimer toutes les branches de suivi de son référentiel local qui ont été supprimées dans un référentiel distant, il peut taper:

git remote Prune Origin

En remarque, le paramètre -p de git fetch -p signifie en réalité "Prune".
Quelle que soit la méthode choisie, les branches distantes non existantes seront supprimées de votre référentiel local.

83
user246645

Vous devez faire ce qui suit

git fetch -p

afin de synchroniser votre liste de branche. Le manuel git dit

-p, --Prune
Après la récupération, supprimez toutes les références de suivi à distance qui n'existent plus sur la télécommande. Les balises ne sont pas sujettes à l'élagage si elles sont récupérées uniquement en raison du suivi automatique des balises par défaut ou d'une option --tags. Toutefois, si les balises sont extraites en raison d'un refspec explicite (sur la ligne de commande ou dans la configuration distante, par exemple si le composant distant a été cloné avec l'option --mirror), elles sont également soumises à l'élagage.

Personnellement, j'aime bien utiliser git fetch Origin -p --progress car il affiche un indicateur de progression.

29
naXa

Cela a fonctionné pour moi.

git remote update --Prune
9
Antstud

En ce qui concerne git fetch -p, son comportement a changé dans Git 1.9, et seul Git 2.9.x/2.10 reflète ce comportement.

Voir commit 9e702 (13 juin 2016) par Jeff King (peff) .
(Fusion par Junio ​​C Hamano - gitster - dans commit 1c22105 , 6 juil. 2016)

fetch: document que l'élagage a lieu avant l'extraction

Cela a été changé dans 10a6cc8 (fetch --Prune: Run Prune avant d'aller chercher, 2014-01-02), mais il semble que personne dans cette discussion n'ait réalisé que nous annoncions explicitement le "après".

Donc, la documentation dit maintenant:

Avant le extraction, supprimez toutes les références de suivi à distance qui n'existent plus sur la télécommande.

C'est parce que:

Lorsque nous avons une branche de suivi à distance nommée "frotz/nitfol" à partir d'une extraction précédente et que l'amont a maintenant une branche nommée "frotz", l'extraction ne parvient pas à supprimer "frotz/nitfol" avec un "git fetch --Prune" de l'amont. git informerait l'utilisateur d'utiliser "git remote Prune" pour résoudre le problème.

Changez la façon dont "fetch --Prune" fonctionne en déplaçant l'opération d'élagage avant l'opération d'extraction. Ainsi, au lieu d'avertir l'utilisateur d'un conflit, il le corrige automatiquement.

6
VonC