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 un git 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:
# 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
, arrojará 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 hacemos 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 combinado 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 anteriormente
repo_clone $ vi file
y establece su contenido en
text2
text1
text1
y luego agregarlo y confirmar los cambios
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts