Su configuración especifica fusionarse con el <nombre de sucursal> del control remoto, pero no se obtuvo dicha referencia.

Resuelto Farrukh Chishti asked hace 8 años • 36 respuestas

Recibo este error al extraer:

Su configuración especifica fusionarse con la referencia 'refs/heads/feature/Sprint4/ABC-123-Branch' del control remoto, pero no se obtuvo dicha referencia.

Este error no se produce en ninguna otra rama.
Lo especial de esta rama es que se crea a partir del commit previo de otra rama.

Mi archivo de configuración se parece a:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch
Farrukh Chishti avatar May 02 '16 21:05 Farrukh Chishti
Aceptado

Lo que esto significa

Su upstream, el control remoto al que llama origin, ya no tiene, o tal vez nunca tuvo (es imposible saberlo solo con esta información) una rama llamada feature/Sprint4/ABC-123-Branch. Hay una razón particularmente común para esto: alguien (probablemente no tú, o lo recordarás) eliminó la rama en ese otro repositorio de Git.

Qué hacer

Esto depende de lo que quieras . Consulte la sección de discusión a continuación. Puede:

  • crear o recrear la rama en el control remoto, o
  • eliminar su sucursal local, o
  • cualquier otra cosa que se te ocurra.

Discusión

Debe estar ejecutándose git pull(si estuviera ejecutándose, git mergerecibiría un mensaje de error diferente o ningún mensaje de error).

Cuando ejecuta git fetch, su Git contacta con otro Git, según la urllínea debajo de la [remote "origin"]sección de su configuración. Ese Git ejecuta un comando ( upload-pack) que, entre otras cosas, envía a tu Git una lista de todas las ramas. Puedes usarlo git ls-remotepara ver cómo funciona (pruébalo, es educativo). Aquí hay un fragmento de lo que obtengo cuando ejecuto esto en un repositorio Git git:

$ 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]

Las refs/heads/entradas enumeran todas las ramas que existen en el control remoto, 1 junto con los ID de confirmación correspondientes (para refs/tags/las entradas, los ID pueden apuntar a objetos de etiqueta en lugar de confirmaciones).

Su Git toma cada uno de estos nombres de sucursales y los cambia de acuerdo con las fetchlíneas en esa misma remotesección. En este caso, su Git se reemplaza refs/heads/mastercon refs/remotes/origin/master, por ejemplo. Tu Git hace esto con cada nombre de rama que aparece.

También registra los nombres originales en el archivo especial FETCH_HEAD(puede ver este archivo si echa un vistazo a su propio .gitdirectorio). Este archivo guarda los nombres e ID obtenidos.

El git pullcomando pretende ser un atajo conveniente: se ejecuta git fetchen el control remoto apropiado y luego git merge(o, si así se indica, git rebase) con los argumentos necesarios para fusionar (o rebase) según lo indicado en la [branch ...]sección. En este caso, su [branch "feature/Sprint4/ABC-123-Branch"]sección dice buscar desde originy luego fusionar con cualquier ID que se encuentre bajo el nombre refs/heads/feature/Sprint4/ABC-123-Branch.

Como no se encontró nada con ese nombre, git pullse queja y se detiene.

Si ejecuta esto en dos pasos separados, git fetchy luego git merge(o git rebase), su Git mirará sus remotes/origin/ramas de seguimiento remoto en caché para ver con qué fusionarse o rebase. Si alguna vez existió una sucursal de este tipo, es posible que aún tenga la sucursal de seguimiento remoto. En este caso, no recibirá ningún mensaje de error. Si nunca existió una rama de este tipo, o si ejecutó git fetchcon --prune(que elimina las ramas de seguimiento remoto inactivas), de modo que no tiene una rama de seguimiento remoto correspondiente, recibiría una queja, pero origin/feature/Sprint4/ABC-123-Branchen su lugar se referiría a ella.

En cualquier caso , podemos concluir que feature/Sprint4/ABC-123-Branchya no existe en el remoto nombrado origin.

Probablemente existió en algún momento y probablemente creó su sucursal local a partir de la sucursal de seguimiento remoto. Si es así, probablemente todavía tengas la rama de seguimiento remoto. Puede investigar para ver quién eliminó la rama del control remoto y por qué, o simplemente puede presionar algo para recrearla o eliminar su rama de seguimiento remoto y/o su rama local.


1 Bueno, al menos todo eso va a admitir . Pero a menos que hayan ocultado específicamente algunas referencias, la lista lo incluye todo.

Editar, julio de 2020: Hay un nuevo protocolo de búsqueda que puede evitar enumerar todo y solo enumerar los nombres que su Git dice que está buscando. Esto puede ayudar con repositorios que tienen una gran cantidad de ramas y/o etiquetas. Sin embargo, si su Git está interesado en todos los nombres posibles, aún obtendrá todos los nombres aquí.

torek avatar May 02 '2016 18:05 torek

Esto también puede suceder si usted/alguien cambia el nombre de la sucursal. Así que siga estos pasos (si sabe que se ha cambiado el nombre de la sucursal): suponiendo que el nombre de la sucursal anterior sea wrong-branch-namey alguien le cambió el nombre a correct-branch-nameSo.

git checkout correct-branch-name

git pull(Verá esto "Su configuración especifica...")

git branch --unset-upstream

git branch --set-upstream-to=origin/correct-branch-name

para versiones anteriores de gitgit push --set-upstream origin correct-branch-name

git pull(no recibirás el mensaje anterior)

Extreme avatar Jan 04 '2018 16:01 Extreme

Verifique si su sucursal remota está disponible para realizar operaciones de extracción. Tuve el mismo problema y finalmente me di cuenta de que alguien eliminó la rama remota.

Malhaar Punjabi avatar Oct 19 '2017 22:10 Malhaar Punjabi

Este es un error más común ahora, ya que muchos proyectos están moviendo su rama a otro masternombre como main,,,,,,, primaryetc. , como se discutió en Github, los planes para reemplazar términos racialmente insensibles como "maestro" y default" lista blanca" .rootreferencelatest

Para solucionarlo, primero averigüe qué está usando ahora el proyecto, que puede encontrar a través de su github, gitlab u otro servidor git.

Luego haga esto para capturar la configuración actual:

$ git branch -vv
...
* master  968695b [origin/master] Track which contest a ballot was sampled for (#629)
...

Busque la línea que describe la masterrama y observe si el repositorio remoto se llama origino upstreamlo que sea.

Luego, usando esa información, cambie el nombre de la sucursal por uno nuevo; por ejemplo, si dice que actualmente está realizando un seguimiento origin/master, sustitúyalo main:

git branch master --set-upstream-to origin/main

También puedes cambiar el nombre de tu propia sucursal para evitar futuras confusiones:

git branch -m main
nealmcb avatar Jul 20 '2020 18:07 nealmcb