Qu'est-ce que cela signifie
Votre amont - la télécommande que vous appelez origin
- n'a plus, ou n'a peut-être jamais eu (il est impossible de dire à partir de cette seule information) une branche nommée feature/Sprint4/ABC-123-Branch
. Il y a une raison particulièrement courante à cela: quelqu'un (probablement pas vous, ou vous vous en souvenez) a supprimé la branche dans cet autre référentiel Git.
Que faire
Cela dépend de ce que vous voulez . Voir la section discussion ci-dessous. Vous pouvez:
- créer ou recréer la branche sur la télécommande, ou
- supprimer votre succursale locale, ou
- tout ce à quoi vous pouvez penser.
Discussion
Vous devez être en cours d'exécution git pull
(si vous étiez en cours git merge
d' exécution, vous obtiendrez un message d'erreur différent ou aucun message d'erreur du tout).
Lorsque vous exécutez git fetch
, votre Git contacte un autre Git, en fonction de la url
ligne sous la [remote "origin"]
section de votre configuration. Ce Git exécute une commande ( upload-pack
) qui, entre autres, envoie à votre Git une liste de toutes les branches. Vous pouvez utiliser git ls-remote
pour voir comment cela fonctionne (essayez-le, c'est éducatif). Voici un extrait de ce que j'obtiens en exécutant ceci sur un référentiel Git pour git
lui-même:
$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1 refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6 refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638 refs/heads/todo
[snip]
Les refs/heads/
entrées répertorient toutes les branches qui existent sur la télécommande, 1 avec les ID de validation correspondants (pour les refs/tags/
entrées, les ID peuvent pointer vers des objets de balise plutôt que des validations).
Votre Git prend chacun de ces noms de branche et le change en fonction de la ou des fetch
lignes de cette même remote
section. Dans ce cas, votre Git remplace refs/heads/master
par refs/remotes/origin/master
, par exemple. Votre Git fait cela avec chaque nom de branche qui apparaît.
Il enregistre également les noms originaux dans le fichier spécial FETCH_HEAD
(vous pouvez voir ce fichier si vous regardez dans votre propre .git
répertoire). Ce fichier enregistre les noms et identifiants récupérés.
La git pull
commande est conçue comme un raccourci pratique: elle s'exécute git fetch
sur la télécommande appropriée, puis git merge
(ou, si vous y git rebase
êtes invité, ) avec les arguments nécessaires pour fusionner (ou rebaser) comme indiqué par la [branch ...]
section. Dans ce cas, votre [branch "feature/Sprint4/ABC-123-Branch"]
section dit de récupérer origin
, puis de fusionner avec l'ID trouvé sous le nom refs/heads/feature/Sprint4/ABC-123-Branch
.
Puisque rien n'a été trouvé sous ce nom, se git pull
plaint et s'arrête.
Si vous exécutez cela en deux étapes distinctes, git fetch
puis git merge
(ou git rebase
), votre Git examinera vos remotes/origin/
branches de suivi à distance mises en cache pour voir avec quoi fusionner ou rebaser. S'il y avait une telle succursale à un moment donné, vous pouvez toujours avoir la succursale de suivi à distance. Dans ce cas, vous n'obtiendrez pas de message d'erreur. S'il n'y a jamais eu une telle branche, ou si vous avez exécuté git fetch
avec --prune
(qui supprime les branches de suivi à distance mortes), de sorte que vous n'ayez pas de branche de suivi à distance correspondante, vous obtiendrez une plainte, mais elle ferait référence à la origin/feature/Sprint4/ABC-123-Branch
place.
Dans les deux cas , nous pouvons conclure qu'il feature/Sprint4/ABC-123-Branch
n'existe pas actuellement sur la télécommande nommée origin
.
Il a probablement existé à un moment donné, et vous avez probablement créé votre branche locale à partir de la branche de suivi à distance. Si tel est le cas, vous avez probablement toujours la branche de suivi à distance. Vous pouvez rechercher qui a supprimé la branche de la télécommande et pourquoi, ou vous pouvez simplement pousser quelque chose pour la recréer, ou supprimer votre branche de suivi à distance et / ou votre branche locale.
1 Eh bien, tout ce qu'il va admettre , au moins. Mais à moins qu'ils n'aient spécifiquement caché certaines références, la liste comprend tout.
Edit, juillet 2020: Il existe un nouveau protocole de récupération qui peut éviter de tout lister , et ne répertorie que les noms que votre Git dit rechercher. Cela peut aider avec les référentiels qui ont un grand nombre de branches et / ou de balises. Cependant, si votre Git est intéressé par tous les noms possibles, vous obtiendrez toujours tous les noms ici.