Cómo resolver el error "no es algo que podamos fusionar" de git

291

Acabo de encontrar un problema al fusionar una rama en master en git. Primero, obtuve el nombre de la sucursal al ejecutar git ls-remote. Llamemos a esa rama "nombre-rama". Luego ejecuté el git merge branch-namecomando y obtuve el siguiente resultado:

fatal: branch-name - not something we can merge

¿Cómo resuelvo este error?

Brian
fuente

Respuestas:

356

Como se muestra en ¿Cómo surge "no algo que podamos fusionar"? , este error puede surgir de un error tipográfico en el nombre de la rama porque está intentando extraer una rama que no existe.

Si ese no es el problema (como en mi caso), es probable que no tenga una copia local de la rama que desea fusionar. Git requiere conocimiento local de ambas ramas para fusionar esas ramas. Puede resolver esto comprobando la rama para fusionar y luego volviendo a la rama en la que desea fusionarse.

git checkout branch-name
git checkout master
git merge branch-name

Esto debería funcionar, pero si recibe un error que dice

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

debe buscar el control remoto (probablemente, pero no necesariamente, "origen") antes de retirar la rama:

git fetch remote-name
Brian
fuente
3
Esto me sucedió después de la adición de un nuevo mando a distancia - que tenía que hacer una git fetchprimera antes de fusionar la rama remota.
Jason
ir a buscar y salir de la sucursal desde el control remoto. git fetch && git checkout BranchName
Juni Brosas
2
Esto me sucedió cuando estaba en el proyecto equivocado (es decir, era un repositorio diferente que ni siquiera tenía la sucursal que quería fusionar)
JoelFan
1
Si está intentando sincronizar una bifurcación en la línea de comando ( help.github.com/articles/syncing-a-fork ), este error probablemente se deba a que perdió el paso 0. ¿Qué? ¿No hay un paso 0 en la lista? Sí, por eso es fácil perderse. "Antes de que pueda sincronizar su fork con un repositorio ascendente, debe configurar un control remoto que apunte al repositorio ascendente en Git". <- ese es el paso 0. Si omite ese paso, obtiene el error anterior, que probablemente haya puesto en Google, que lo llevará aquí. :-)
Steve Bonds
1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU
96

Es una sugerencia tonta, ¡pero asegúrese de que no haya errores tipográficos en el nombre de la sucursal!

sin fin
fuente
44
no tan tonto, ya que "error tipográfico" podría reducirse al hecho de que la rama aún no ha sido recuperada (y por lo tanto desconocida localmente) ... Git hace las cosas de manera diferente a CVS o SVN ..
klang
2
El problema también podría ser causado si el nombre de la rama contiene caracteres como comas (,) o apóstrofes (').
AxeEffect
También asegúrese de estar en el repositorio correcto o en la ventana / pestaña del terminal, especialmente si trabaja en múltiples repositorios simultáneamente.
totymedli
71

Al tirar de un control remoto aguas arriba, git fetch --allhizo el truco para mí:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

En otros casos, descubrí que el error "No es algo que podamos combinar" también ocurrirá si la rama remota (origen, ascendente) no existe. Esto puede parecer obvio, pero es posible que te encuentres haciendo git merge origin/developun repositorio que solo tiene master.

Eneko Alonso
fuente
55
En serio, no sé por qué esta respuesta no ha obtenido tantos votos como la anterior. 'git fetch -all' es el comando que uno normalmente no ejecuta antes de fusionar una rama remota y eso resolvió el problema para mí.
Dayanand Gowda
2
Porque fetch no se extrae automáticamente y debe hacerlo manualmente. Entonces, un par buscar --todos y tirar-- todos harán el truco.
danielpopa
¡Gracias! El git remote add upstreamera lo importante que faltaba que lo resolvió para mí. Creo que un error común es asumir que una bifurcación sabe automáticamente de dónde se bifurcó.
Brent
23

También tuve este problema. La rama se parecía a 'nombre de usuario / maestro', lo que parecía confundir a git ya que parecía una dirección remota que definí. Para mí usando esto

git merge origin/username/master

funcionó perfectamente bien.

Spekulatius
fuente
44
También tuve que poner origin/antes del nombre de la rama remota.
AsGoodAsItGets
Tendrá que hacer esto si el nombre de la rama tiene una barra diagonal /.
CTS_AE
21

El siguiente método funciona para mí cada vez.

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged
RNV
fuente
Esto funcionó para mí, gracias. I esta es esencialmente la solución correcta: básicamente, asegúrese de tener la rama fuente verificada antes de intentar fusionarla.
dps
11

Puede suceder porque esa rama no está en su local. antes de fusionar el uso

git fetch origin
Alok Kamboj
fuente
7

Recibirá este error porque la rama que desea fusionar no existe en su repositorio local.

Entonces, primero revise el brach que desea fusionar en la rama maestra con el siguiente comando:

git checkout branch_name_to_merge

Después de esto, intente fusionarlo con la rama maestra con el siguiente comando:

git merge branch_name_to_merge
Bilal Ahmed Yaseen
fuente
2
Esto también puede suceder si no está prestando atención al nombre de su sucursal (es decir, mal escrito) :)
Matt Borja
Esto funcionó para mí. Cuando estoy trabajando en Atom con la pestaña Git y cambio ramas con el menú desplegable, a veces tengo que ir a la línea de comando y checkoutla rama
nzaleski
7

Este error sugiere que la rama desde la que desea fusionar los cambios (es decir, en su caso, nombre-rama) no está presente en su local, por lo que debe verificar la rama y buscar los cambios locales. Realice el pago en su rama maestra y busque, luego siga los pasos a continuación:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name
Amar Magar
fuente
Seré exigente y diré que no creo que el mensaje de error sugiera algo como lo anterior :-)
Brian Agnew
7

Esta respuesta no está relacionada con la pregunta anterior, pero enfrenté un problema similar, y tal vez esto sea útil para alguien. Fusioné mi rama de características para dominar de la siguiente manera:

$ git merge fix-load

Recibí el siguiente mensaje de error:

fusionar: arreglar-cargar - no es algo que podamos fusionar

Miré sobre todas las soluciones, pero ninguna funcionó.

Encontré que el problema era un error ortográfico en el nombre de mi sucursal (en realidad, el nombre de la sucursal de fusión es fix-loads).

yala ramesh
fuente
44
Para mí, agregar origen funcionó. Tomando tu ejemplo, git merge origin/fix-loadsfuncionó.
Ram Patra el
3

Recibí este error cuando hice un git merge BRANCH_NAME "some commit message"- Olvidé agregar el indicador -m para el mensaje de confirmación, por lo que pensé que el nombre de la rama incluía el comentario.

puramente lógico
fuente
3

En mi opinión, había fallado en asignar mi sucursal local con un repositorio remoto. Lo hice a continuación y funcionó bien.

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain
Vinay Sharma
fuente
2

Si la cadena que contiene la referencia es producida por otro comando Git (o cualquier otro comando de shell), asegúrese de que no contenga un carro de retorno al final. Tendrá que quitarlo antes de pasar la cadena a "git merge".

Tenga en cuenta que es bastante obvio cuando esto sucede, porque el mensaje de error aparece en 2 líneas:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge
ocroquette
fuente
3
Proporcione un comentario cuando rechace una respuesta. Tal vez no fue el problema que tenía el póster original, pero es una posible causa del mensaje de error (tuve el problema yo mismo).
ocroquette
2

Recibimos este error porque teníamos una coma (,) en el nombre de la rama. Eliminamos la sucursal local, luego la volvimos a verificar con un nuevo nombre sin la coma. Pudimos fusionarlo con éxito.

Doug
fuente
El subrayado también parece problemático. +1
Anders Lindén
1
Utilizo guiones bajos a menudo en los nombres de las sucursales @ AndersLindén
nzaleski
y el paréntesis también fue problemático ... + 1
Pablo Ezequiel
1

Para la posteridad: como dijo AxeEffect ... si no tiene errores tipográficos, verifique si tiene caracteres ridículos en el nombre de su sucursal local, como comas o apóstrofes. Exactamente eso me pasó justo ahora.

Elder Smash
fuente
O subrayar. +1
Anders Lindén
1

Sugiero verificar si puede cambiar a la rama con la que está tratando de fusionarse.

Recibí este error a pesar de que la rama con la que quería fusionarme estaba en el repositorio local y no había errores ortográficos.

Ignoré mis cambios locales para poder cambiar a la rama (Stash o commit también pueden ser preferidos). Después de esto volví a la rama inicial, y la fusión fue exitosa.

eaykin
fuente
0

Para mí, el problema ocurrió cuando intenté esto:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

De hecho, debería haber escrito en masterlugar de develop, porque master era el nombre de la rama de Subtree, no mi rama real.

Levon Petrosyan
fuente
0

Esto puede sonar extraño, pero recuerde configurar su correo electrónico y nombre de git:

git config --global user.email "[email protected]"
git config --global user.name "FIRST_NAME LAST_NAME"
superarts.org
fuente
0

Para mí, el problema era las 'comillas dobles' en el mensaje de fusión. Entonces, cuando quité la doble marca, todo funcionó mágicamente. Espero ayudar a alguien. (Disculpa mi pobre ingles)

Aryelson Santos
fuente
0

Tenía un árbol de trabajo con master y otra rama desprotegida en dos carpetas de trabajo diferentes.

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

Si necesita fusionar la última confirmación:

git merge origin/vyas-cr-core 
git push

Y es lo mismo que siempre he hecho:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push
Vyas Bharghava
fuente
0

La rama que está intentando fusionar puede no estar identificada por usted actualmente, así que realice git branch y vea si la rama que desea fusionar no existe, si no, realice git pull y ahora si lo hace git branch, la rama será visible ahora, y ahora actúasgit merge <BranchName>

yogeswaran
fuente