124 votes

git branch -d donne un avertissement

Je veux juste mieux comprendre le message d'avertissement après avoir supprimé une branche locale.

avertissement : suppression d'une branche 'old_branch' qui a été fusionné avec 'refs/remotes/origin/old_branch' mais pas encore fusionné avec HEAD .

87voto

cjhveal Points 1770

Cela vous avertit simplement que vous avez des changements poussés vers la branche sur origin mais ils ne sont pas fusionnés dans la branche actuellement extraite, donc vous ne faites que la supprimer localement.

Il vous avertit que vous n'avez plus de copie locale de cette branche, mais elle existe dans origin

Si vous voulez supprimer la branche distante également, utilisez git push --delete origin old_branch

41voto

Karl Bielefeldt Points 15469

En supposant que vous avez actuellement master vérifié, cela signifie que les changements effectués dans old_branch ne sont pas présents dans master . Cependant, ils sont présents dans old_branch en origin .

10voto

Max K Points 659

Cela signifie que votre agence locale old_branch est à jour avec la branche distante old_branch à distance origin mais elle n'est pas fusionnée à la branche master qui est considérée comme la branche principale du dépôt.

C'est juste une précaution de git. Il vous donne un indice : peut-être avez-vous fait votre travail dans la branche topic et oublié de le fusionner à la branche principale ?


mise à jour

Git vous prévient de la perte de vos modifications. Par exemple, si vous n'avez pas votre old_branch sur le master, git ne vous permet même pas de supprimer une branche qui n'est pas fusionnée avec le master (il le permet, mais avec une touche -D qui est force-delete option).

8voto

user253987 Points 106

Pour compléter les autres réponses, cela peut également signifier que la modification a peut-être été fusionnée dans master, mais que votre copie locale de master ne la reflète pas encore. Dans tous les cas, cela vous informe simplement que la copie locale de votre master ne contient pas les changements que vous avez poussés sur l'origine. Fusionné/Non fusionné...peut-être, peut-être pas

5voto

Mike Williamson Points 633

Plusieurs réponses ici sont tout à fait correctes, mais semblent ne pas avoir entièrement répondu à la question. Je vais donc faire une autre tentative.

Question du PO paraphrasée

Après avoir effectué un Demande de retrait et supprimer une branche sur GitHub/Bitbucket/etc. automatiquement en complétant le PR, je vois ensuite cette erreur lorsque je supprime la branche localement : warning: deleting branch 'old_branch' that has been merged to 'refs/remotes/origin/old_branch', but not yet merged to HEAD.

Comprendre la chronologie

GitHub, ou tout autre référentiel distant, n'a aucune connaissance de l'état local de votre machine.

Lorsqu'une demande de pull est terminée et qu'elle propose de supprimer la branche PR originale, elle n'a aucune connaissance de votre branche locale.

À ce stade, vous supprimez votre branche locale. Votre le repo/ordinateur local connaît cette ligne de temps :

  1. myfeature ==> origin/myfeature ( myfeature a été poussé vers le dépôt distant)
  2. puis myfeature est supprimé
  3. Así que origin/myfeature existe toujours, même si elle n'a pas de représentation locale

Bien sûr, ce n'est pas vrai, car la origin/myfeature a été détruite à la fin de la RP, mais votre ordinateur local ne le sait pas. Donc, Git vous donne l'avertissement.

GitHub/BitBucket/etc. ne devrait-il pas rendre cela plus facile ?

Parce que le

PR terminé ==> Branche distante supprimée

Le paradigme est si commun qu'il serait bien que la branche distante informe d'une manière ou d'une autre la branche locale de cet événement. Mais Git s'est remarquablement bien débrouillé avec la "communication unidirectionnelle" où l'on demander uniquement des informations mais ne jamais envoyer d'informations non demandées . La communication "bidirectionnelle" dans un domaine inciterait probablement les gens à la vouloir dans d'autres domaines également, et bientôt nous nous retrouverions avec Git ressemblant davantage à SVN ou à tout autre paradigme de "dépôt central" qui était trop fragile pour réussir. Quelqu'un qui en sait plus que moi peut probablement mieux élaborer tous les problèmes que cette "communication bidirectionnelle" causerait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X