...
En ocasiones al hacer el merge de una rama con otra aparecen conflictos (al estilo de SVN o de cualquier otro sistema de control de versiones) y nos vemos obligados a resolverlos para poder integrarlo
Si ejecutamos el comando
Bloque de código |
---|
$ git status |
Obtendremos más información
Aquí hemos intentado hacer merge de la rama jira-IDI-131
con la rama ejemplo_conflictos
. Ambos tienen el fichero ejemplo.txt
con contenidos incompatibles y hay que resolverlo manualmente.
El contenido del fichero ejemplo.txt
en la rama ejemplo_conflictos
es
Bloque de código |
---|
para dar un conflicto gordo |
y en la rama jira-IDI-131
Bloque de código |
---|
este es un ejemplo para dar conflicto |
Si abrimos el fichero con el editor veremos los problemas
Bloque de código |
---|
<<<<<<< HEAD
para dar un conflicto gordo
=======
este es un ejemplo para dar conflicto
>>>>>>> jira-IDI-131 |
Para localizar el inicio del conflicto hay que localizar el marcador «««<
. El marcador =======
separa los cambios entre las 2 ramas, seguido de »»»>
BRANCH-NAME. En este ejemplo alguien escribió “para dar un conflicto gordo” en la rama base y otra persona escribió “este es un ejemplo para dar conflicto” en la rama jira-IDI-131
Decide qué es lo que quieres incorporar, o genera una nueva versión del fichero que incorpore ambos cambios. Elimina los marcadores de conflicto «««<
, =======
, »»»>
y haz los cambios finales.
Bloque de código |
---|
$ git add .
$ git commit -m "Resuelto el conflicto de merges" |
Conflictos con uno mismo
En ocasiones GIT detecta 2 commits hacia el mismo fichero y a la hora de hacer un push de la rama nos puede dar problemas
Bloque de código |
---|
$ git push origin jira-XXX |
Nos puede dar como resultado
Bloque de código |
---|
To https://gitlab.um.es/mncs/portalfundeweb.git
! [rejected] jira-XXX -> jira-XXX (non-fast-forward)
error: failed to push some refs to 'https://gitlab.um.es/mncs/portalfundeweb.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details. |
Para arreglarlo podemos hacer lo siguiente
Bloque de código |
---|
$ git pull --rebase origin jira-XXX |
Y si tenemos suerte será capaz de solventar el conflicto
Bloque de código |
---|
From https://gitlab.um.es/mncs/portalfundeweb
* branch jira-XXX -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Applying: arreglamos el problema con el settings
Using index info to reconstruct a base tree...
M .m2/settings.xml
.git/rebase-apply/patch:42: trailing whitespace.
<pluginRepository> <id>plugins.archiva.atica.umu.es</id>
.git/rebase-apply/patch:43: trailing whitespace.
<name>ATICA - UMU Plugins Repository</name>
.git/rebase-apply/patch:44: trailing whitespace.
<url>https://archiva.um.es/archiva/repository/FundeWeb/</url>
.git/rebase-apply/patch:45: trailing whitespace.
<releases>
.git/rebase-apply/patch:46: trailing whitespace.
<enabled>true</enabled>
warning: squelched 5 whitespace errors
warning: 10 lines add whitespace errors.
Falling back to patching base and 3-way merge... |
Pero puede no ser así y que nos responda algo como
...