¿Por qué dice git: "Extraer es imposible porque tienes archivos sin mezclar"?

Cuando intento colocar el directorio del proyecto en el terminal, veo el siguiente error:

 harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master U app/config/app.php U app/config/database.php U app/routes.php Pull is not possible because you have unmerged files. Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'. 

¿Por qué git dice "Pull is not possible because you have unmerged files" y cómo resolverlo?

82
15 окт. establecido por Harsukh Makwana el 15 de octubre 2014-10-15 10:28 '14 a las 10:28 2014-10-15 10:28
@ 9 respuestas

Actualmente, lo que sucede es que tiene un conjunto específico de archivos que intentó fusionar anteriormente, pero ejecutaron conflictos de combinación. Idealmente, si ocurre un conflicto de combinación, debería resolverlos manualmente y confirmar los cambios usando git add file.name git commit -m "removed merge conflicts" . Ahora, otro usuario ha actualizado los archivos en cuestión en su repositorio e hizo sus cambios en el repositorio general hacia arriba.

Ocurrió que los conflictos de fusión (posiblemente) de la última confirmación no se resolvieron, por lo que los archivos no se fusionaron en orden y, por lo tanto, el indicador U (sin unmerged ) de los archivos. Así que ahora, cuando haces git pull , git da un error porque tienes una versión del archivo que se resolvió incorrectamente.

Para resolver este problema, tendrá que resolver los conflictos de combinación en cuestión y agregar y confirmar cambios antes de poder hacer git pull .

Un ejemplo de la reproducción y resolución del problema:

 # Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params` Desktop $ cd test 

Primero crea la estructura del repositorio

 test $ mkdir repo  cd repo  git init  touch file  git add file  git commit -m "msg" repo $ cd ..  git clone repo repo_clone  cd repo_clone repo_clone $ echo "text2" >> file  git add file  git commit -m "msg"  cd ../repo repo $ echo "text1" >> file  git add file  git commit -m "msg"  cd ../repo_clone 

Ahora estamos en repo_clone, y si haces git pull , causará conflictos

 repo_clone $ git pull origin master remote: Counting objects: 5, done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From /home/anshulgoyal/Desktop/test/test/repo * branch master -> FETCH_HEAD 24d5b2e..1a1aa70 master -> origin/master Auto-merging file CONFLICT (content): Merge conflict in file Automatic merge failed; fix conflicts and then commit the result. 

Si ignoramos los conflictos de clonación y hacemos más confirmaciones en el repositorio original,

 repo_clone $ cd ../repo repo $ echo "text1" >> file  git add file  git commit -m "msg"  cd ../repo_clone 

Y luego hacemos git pull , obtenemos

 repo_clone $ git pull U file Pull is not possible because you have unmerged files. Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'. 

Observe que el file ahora file en un estado no vinculado, y si hacemos un git status , podemos ver claramente lo mismo:

 repo_clone $ git status On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commit each, respectively. (use "git pull" to merge the remote branch into yours) You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: file 

Por lo tanto, para resolver este problema, primero debe resolver el conflicto de combinación, que ignoramos anteriormente

 repo_clone $ vi file 

y establecer su contenido a

 text2 text1 text1 

Y luego agregarlo y cometer los cambios.

 repo_clone $ git add file  git commit -m "resolved merge conflicts" [master 39c3ba1] resolved merge conflicts 
113
28 нояб. La respuesta se da mu 無 28 de noviembre. 2014-11-28 13:51 '14 a las 13:51 2014-11-28 13:51
31
30 янв. Faisal da la respuesta el 30 de enero. 2017-01-30 09:05 '17 a las 9:05 2017-01-30 09:05

Está intentando agregar otra entrada nueva a su sucursal local mientras el directorio de trabajo no está limpio. Como resultado, Git se niega a hacer atracción. Para una mejor visualización del escenario, considere los siguientes gráficos:

remoto: A <-B <-C <-D
local: A <-B *
(* indica que tiene varios archivos que se han modificado pero no se han confirmado).

Hay dos opciones para resolver esta situación. Puede cancelar los cambios en sus archivos o guardarlos.

Opción uno: descartar cambios
Puede usar git checkout para cada archivo no relacionado, o puede usar git reset --hard HEAD para restablecer todos los archivos en su rama en HEAD. Por cierto, HEAD en tu sucursal B local, sin un asterisco Si selecciona esta opción, el gráfico se convertirá en el siguiente:

remoto: A <-B <-C <-D
local: A <-B

Ahora, cuando tira, puede redirigir su rama con cambios desde el asistente. Después de tirar, la rama se verá como maestra:

local: A <-B <-C <-D

Opción dos: guardar cambios
Si desea guardar los cambios, primero debe resolver cualquier conflicto de fusión en cada uno de los archivos. Puede abrir cada archivo en su IDE y buscar los siguientes caracteres:

<<<<<<< HEAD
// tu versión de código
=======

// versión remota del código
→ → → →>

Git te presenta dos versiones del código. El código contenido en la marca HEAD es una versión de la rama local actual. Otra versión es la que viene de la consola. Después de seleccionar una versión del código (y eliminar otro código junto con los marcadores), puede agregar cada archivo a su área intermedia escribiendo git add . El paso final es confirmar su resultado escribiendo git commit -m con el mensaje apropiado. En esta etapa, nuestro gráfico se ve así:

remoto: A <-B <-C <-D
local: A <-B <-C '

Aquí he designado la corrección, que acabamos de hacer como C ', porque difiere de la fijación de C en la consola. Ahora, si intenta retirarse, obtendrá un error inmediato hacia adelante. Git no puede reproducir los cambios en un área remota en su rama, ya que tanto su rama como la parte remota están separadas de la fijación ancestral general B. En este punto, si desea retirarse, puede hacer otra git merge git rebase o git rebase su rama en el mando a distancia.

El dominio de Git requiere la capacidad de comprender y manipular listas enlazadas unidireccionales. Espero que esta explicación te haga pensar en la dirección correcta sobre el uso de Git.

29
01 дек. Respuesta dada por Tim Biegeleisen 01 de diciembre 2014-12-01 12:26 '14 a las 12:26 a.m. 2014-12-01 12:26

Hay una solución simple. Pero para esto primero necesitas aprender lo siguiente

 vimdiff 

Para eliminar conflictos, puedes usar

 git mergetool 

El comando anterior básicamente abre un archivo local, un archivo mixto, un archivo remoto (un total de 3 archivos) para cada archivo en conflicto. Los archivos locales y remotos están destinados solo como referencia y, con su ayuda, puede elegir qué incluir (o no) en un archivo mixto. Y solo guarda y cierra el archivo.

15
03 дек. La respuesta la da Pawan Seerwani 03 dic. 2014-12-03 22:04 '14 a las 10:04 PM 2014-12-03 22:04

Tiene archivos locales que deben fusionarse antes de poder extraerlos. Puede verificar los archivos y luego sobrescribir los archivos locales.

 git checkout app/config/app.php app/config/database.php app/routes.php git pull origin master 
5
15 окт. La respuesta se da a Nick el 15 de octubre. 2014-10-15 10:32 14 a las 10:32 2014-10-15 10:32

Si desea eliminar una sucursal remota para el lanzamiento local (p. Ej., Para pruebas o pruebas), y cuando $ git pull obtenga conflictos de combinación locales:

 $ git checkout REMOTE-BRANCH $ git pull (you get local merge conflicts) $ git reset --hard HEAD (discards local conflicts, and resets to remote branch HEAD) $ git pull (now get remote branch updates without local conflicts) 
2
03 авг. Respuesta dada por el usuario 5245397 03 ago. 2016-08-03 18:50 '16 a las 18:50 2016-08-03 18:50

Si no desea fusionar los cambios y aún desea actualizar su cambio local, vaya al comando.

 git reset HEAD —hard 

Esto restablecerá su local con HEAD, y luego ¡saque su consola usando git pull!

1
11 июля '16 в 15:51 2016-07-11 15:51 La respuesta es dada por Santosh el 11 de julio de '16 a las 15:51 2016-07-11 15:51

Tuve el mismo problema
En mi caso, los siguientes pasos:

  • Se eliminó todo el archivo que se ejecuta con el símbolo U (sin fusionar). as-

 U project/app/pages/file1/file.ts U project/www/assets/file1/file-name.html 
  1. Extraer código del maestro
 $ git pull origin master 
  1. Condición comprobada
  $ git status 

Aquí está el mensaje que apareció:
y tienen, respectivamente, 2 y 1 fijaciones diferentes, respectivamente.
(use "git pull" to merge the remote branch into yours)
Tienes caminos indelebles.
(fix conflicts and run "git commit")

Rutas fijas:
(use "git add ..." para marcar el permiso)

 both modified: project/app/pages/file1/file.ts both modified: project/www/assets/file1/file-name.html 
  1. Agregado todos los cambios nuevos -
  $ git add project/app/pages/file1/file.ts project/www/assets/file1/file-name.html 
  1. Para arreglar cambios en la cabeza -
 $ git commit -am "resolved conflict of the app." 
  1. Código empujado -
 $ git push origin master 

Qué giro puede resolver el problema con esta imagen - 2019

10 мая '17 в 10:30 2017-05-10 10:30 S.Yadav dio la respuesta el 10 de mayo de 2017 a las 10:30 2017-05-10 10:30

Si se produce un conflicto de combinación, puede abrir un archivo separado. Obtendrá los caracteres "<<<< o → → →>". Se relacionan con sus cambios y los cambios presentes en el control remoto. Puede editar manualmente la parte deseada. Luego guarda el archivo y luego: git agregar

Los conflictos de fusión se resolverán.

0
11 февр. la respuesta se da dfordevy 11 feb. 2016-02-11 12:44 '16 a las 12:44 2016-02-11 12:44

Otras preguntas acerca de tags