theirs how content conflicts git git-pull merge-conflict-resolution git-fetch

how - git resolve conflicts using theirs



¿Por qué dice git "Pull no es posible porque tienes archivos no fusionados"? (9)

Cuando trato de instalar mi directorio de 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?


Cuando ocurre un conflicto de fusión, puede abrir un archivo individual. Obtendrá símbolos "<<<<<<< o >>>>>>>". Estos se refieren a sus cambios y los cambios presentes en remoto. Puede editar manualmente la parte que se requiere. después de eso guarda el archivo y luego hazlo: git add

Los conflictos de fusión se resolverán.


Está intentando agregar uno más nuevos commits en 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:

remoto: A <- B <- C <- D
local: A <- B *
(* indica que tiene varios archivos que han sido modificados pero no confirmados).

Hay dos opciones para lidiar con esta situación. Puede descartar los cambios en sus archivos o retenerlos.

Opción uno: deseche los cambios
Puedes usar git checkout para cada archivo no compartido, o puedes usar git reset --hard HEAD para restablecer todos los archivos en tu rama a HEAD. Por cierto, HEAD en su rama local es B, sin un asterisco. Si elige esta opción, el diagrama se convierte en:

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

Ahora cuando tira, puede avanzar rápidamente su rama con los cambios desde el maestro. Después de tirar, tu rama se vería como maestra:

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

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:

<<<<<<< CABEZA
// tu versión del código
=======
// la versión del código del control remoto
>>>>>>>

Git te presenta dos versiones de código. El código contenido en los marcadores HEAD es la versión de su rama 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 ensayo escribiendo git add . El último paso es confirmar el resultado escribiendo git commit -m con un mensaje apropiado. En este punto, nuestro diagrama se ve así:

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

Aquí he etiquetado el compromiso que acabamos de hacer como C ''porque es diferente de la confirmación C en el control remoto. Ahora, si intenta tirar obtendrá un error de avance no rápido. Git no puede jugar los cambios en el control remoto de su rama, porque tanto su rama como el control remoto han divergido del ancestro común cometido B. En este punto, si desea tirar, puede hacer otra git merge , o git rebase su rama en el mando a distancia.

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


Hay una solución simple para eso. Pero para eso, primero tendrá que aprender lo siguiente

vimdiff

Para eliminar conflictos, puede usar

git mergetool

El comando anterior básicamente abre el archivo local, el archivo mixto, el 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.


Hubo el mismo problema conmigo
En mi caso, los pasos son los siguientes-

  1. Se eliminó todo el archivo que comenzaba con el símbolo U (sin combinar). como-

U project/app/pages/file1/file.ts U project/www/assets/file1/file-name.html

  1. Extraiga el código del maestro

$ git pull origin master

  1. Comprobado el estado

$ git status

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

Rutas no fusionadas:
(use "git add ..." para marcar la resolución)

both modified: project/app/pages/file1/file.ts both modified: project/www/assets/file1/file-name.html

  1. Se agregaron todos los cambios nuevos -

$ git add project/app/pages/file1/file.ts project/www/assets/file1/file-name.html

  1. Commitir cambios en head-

$ git commit -am "resolved conflict of the app."

  1. Empujado el código -

$ git push origin master

¿Qué giro puede emitir resuelto con esta imagen?


Lo que está sucediendo actualmente es que tienes un cierto conjunto de archivos, que has intentado fusionar antes, pero que crean conflictos de fusión. Idealmente, si uno obtiene un conflicto de fusión, debería resolverlo 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 común ascendente.

Ocurre que los conflictos de fusión (probablemente) de la última confirmación no se resolvieron, por lo tanto, sus archivos no se fusionaron correctamente y, por lo tanto, la bandera U (no fusionada) de los archivos. Así que ahora, cuando haces un git pull , git está arrojando el error, porque tienes alguna versión del archivo, que no se ha resuelto correctamente.

Para resolver esto, tendrá que resolver los conflictos de fusión en cuestión, y agregar y confirmar los cambios, antes de que pueda hacer un git pull .

Reproducción de muestra y resolución del problema:

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

Primero, creemos 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 un git pull , lanzará 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 en el clon y realizamos más confirmaciones en el repositorio original ahora,

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

Y luego hacemos un 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''.

Tenga en cuenta que el file ahora está en un estado no asociado 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

Entonces, para resolver esto, primero tenemos que resolver el conflicto de fusión que ignoramos antes

repo_clone $ vi file

y establecer sus contenidos a

text2 text1 text1

y luego agrégalo y confirma los cambios

repo_clone $ git add file && git commit -m "resolved merge conflicts" [master 39c3ba1] resolved merge conflicts


Si desea desplegar una rama remota para ejecutar localmente (por ejemplo para revisar o probar), y cuando $ git pull obtiene conflictos de fusión local:

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


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

git reset HEAD —hard

¡Esto restablecerá su local con HEAD y luego jalará su control remoto usando git pull!


Simplemente ejecute este comando:

git reset --hard


Tiene algunos archivos localmente que deben combinarse antes de poder extraerlos. Puede verificar los archivos y luego tirar para sobrescribir sus archivos locales.

git checkout app/config/app.php app/config/database.php app/routes.php git pull origin master