Cuando intento acceder al directorio de mi proyecto en la 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é dice git "Pull is not possible because you have unmerged files"
y cómo puedo resolverlo?
git
git-pull
merge-conflict-resolution
git-fetch
Harsukh Makwana
fuente
fuente
Respuestas:
Lo que está sucediendo actualmente es que tiene un cierto conjunto de archivos, que ha intentado fusionar anteriormente, pero que arrojaron conflictos de fusión. Idealmente, si uno tiene un conflicto de fusió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 y ha llevado sus cambios al repositorio ascendente común.Sucede que los conflictos de fusión de (probablemente) la última confirmación no se resolvieron, por lo que sus archivos no se fusionaron correctamente y, por lo tanto, el indicador
U
(unmerged
) para los archivos. Entonces, cuando haces ungit pull
, git está arrojando el error, porque tienes alguna versión del archivo, que no se resuelve correctamente.Para resolver esto, deberá resolver los conflictos de fusión en cuestión, y agregar y confirmar los cambios, antes de poder hacer una
git pull
.Reproducción de muestra y resolución del problema:
Primero, creemos la estructura del repositorio
Ahora estamos en repo_clone, y si haces un
git pull
, arrojará conflictosSi ignoramos los conflictos en el clon y hacemos más confirmaciones en el repositorio original ahora,
Y luego hacemos un
git pull
, obtenemosTenga en cuenta que el
file
ahora está en un estado no combinado y si hacemos ungit status
, podemos ver claramente lo mismo:Entonces, para resolver esto, primero tenemos que resolver el conflicto de fusión que ignoramos anteriormente
y establece su contenido en
y luego agregarlo y confirmar los cambios
fuente
Está intentando agregar una nueva confirmación más a su sucursal local mientras su directorio de trabajo no está limpio. Como resultado, Git se niega a hacer el tirón. Considere los siguientes diagramas para visualizar mejor el escenario:
Hay dos opciones para lidiar con esta situación. Puede descartar los cambios en sus archivos o conservarlos.
Opción uno: Deseche los cambios
Puede usar
git checkout
para cada archivo no fusionado, o puede usargit reset --hard HEAD
para restablecer todos los archivos de su rama a HEAD. Por cierto, HEAD en su sucursal local es B, sin un asterisco. Si elige esta opción, el diagrama se convierte en:Ahora, cuando tire, puede avanzar rápidamente su rama con los cambios de maestro. Después de tirar, tu rama se vería como maestra:
Opción dos: conservar los cambios
Si desea conservar los cambios, primero deberá resolver cualquier conflicto de fusión en cada uno de los archivos. Puede abrir cada archivo en su IDE y buscar los siguientes símbolos:
Git te presenta dos versiones de código. El código contenido dentro de los marcadores HEAD es la versión de su sucursal local actual. La otra versión es lo que viene del control remoto. Una vez que haya elegido una versión del código (y haya eliminado el otro código junto con los marcadores), puede agregar cada archivo a su área de preparación escribiendo
git add
. El último paso es confirmar su resultado escribiendogit commit -m
con un mensaje apropiado. En este punto, nuestro diagrama se ve así:Aquí he etiquetado el commit que acabamos de hacer como C 'porque es diferente del commit C en el control remoto. Ahora, si intenta tirar, obtendrá un error de avance no rápido. Git no puede reproducir los cambios en el control remoto en su rama, ya que tanto su rama como el control remoto se han separado de la confirmación de antepasado común B. En este punto, si desea tirar, puede hacer otra
git merge
ogit rebase
su rama en el control remoto.Obtener un dominio de Git requiere ser capaz de comprender y manipular listas vinculadas unidireccionales. Espero que esta explicación te haga pensar en la dirección correcta sobre el uso de Git.
fuente
Hay una solución simple para ello. Pero para eso primero tendrás que aprender lo siguiente
Para eliminar los conflictos, puede usar
El comando anterior básicamente abre un archivo local, un archivo mixto, un archivo remoto (3 archivos en total) para cada archivo en conflicto. Los archivos locales y remotos son solo para su referencia, y al usarlos puede elegir qué incluir (o no) en el archivo mixto. Y solo guarde y salga del archivo.
fuente
Si no desea fusionar los cambios y aún desea actualizar su local, ejecute:
Esto restablecerá su local con HEAD y luego extraerá su control remoto usando git pull.
Si ya ha comprometido su fusión localmente (pero aún no ha presionado al control remoto) y desea revertirlo también:
fuente
Si desea desplegar una rama remota para que se ejecute localmente (por ejemplo, para fines de revisión o prueba), y cuando
$ git pull
obtiene conflictos de fusión locales:fuente
Tiene algunos archivos localmente que deben fusionarse antes de poder extraer. Puede retirar los archivos y luego tirar para sobrescribir sus archivos locales.
fuente
Pasos a seguir :
Gracias Sarbasish
fuente
Hubo el mismo problema conmigo
En mi caso, los pasos son los siguientes:
Aquí está el mensaje que apareció,
y tienen 2 y 1 confirmaciones diferentes cada uno, respectivamente. Tienes caminos no fusionados.
(use "git pull" to merge the remote branch into yours)
(fix conflicts and run "git commit")
Rutas no fusionadas:
(use "git add ..." para marcar la resolución)
Qué turno puede resolver el problema con esta imagen:
fuente
Cuando se produce un conflicto de fusión, puede abrir un archivo individual. Obtendrá los símbolos "<<<<<<< o >>>>>>>". Estos se refieren a sus cambios y los cambios presentes en el control remoto. Puede editar manualmente la parte que se requiere. después de eso guarde el archivo y luego haga: git add
Los conflictos de fusión se resolverán.
fuente
Solo ejecuta este comando:
fuente