Cuando utilizamos git pull origin master
internamente se ejecutan dos comandos: `git fetch` y git merge
.
El primer comando git fetch origin master
descarga el contenido de la rama (branch) master
del repositorio origin
Mientras, el comando git merge
junta los archivos descargados con la rama master
local. Es muy frequente que tengamos algunos archivos differentes a los del repositorio remoto y a la hora de hacer el merge
se presenten inconsistencias entre el repositorio remoto y el local.
La forma más común de corregir esto es editando el archivo con problemas (usar git status
sobre la raíz del repositorio) y seleccionar la versión que necesitemos, es decir, entre la version remota y la local. Git automaticamente añade las dos versiones en el archivo aludido concatenado las líneas de texto difentes entre las dos versiones. Estas diferencias son fácilmente visibles por que git añade adicionalmente las líneas >>>>[hash commit remoto]
para las diferencias provenientes del repositorio remoto, y >>>HEAD
para la version local. Ambas versiones están separadas por los símbolos =======
. Recuerda, estas modificaciones son automáticamente añadidas en el archivo que presenta el problema.
Una vez que hemos borrado la versión que no queremos proseguimos a salvar el archivo, añadirlo al Stage de git (con git add [archivo problematico]
) y luego hacemos un commit (git commit -m "alguna mensaje"
).
Arreglar inconsitencias en archivos grandes
Algunas veces editar manualmente cada archivo problemático puede ser engorroso o simplemente ya sabemos que alguna versión es mejor que la otra. Por ejemplo la versión local (nuestra versión) puede estar más actualizada o la versión remota (la del ellos) puede ser más estable.
En versiones git > 1.6.1 podemos utilizar la opción --ours
(nuestra versión) o --theirs
(la de ellos) para seleccionar si queremos mantener la versión local o la versión remota (respectivamente). Esta opción sólo es válida para el comando git checkout [archivo problemático]
. De esta manera podemos hacer:
git checkout --ours [archivo problemático]
Para quedarnos con nuestra versión.
git checkout --theirs [archivo problemático]
Para quedarnos con la versión remota.