• Like
Resolución de conflictos en git
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Resolución de conflictos en git

  • 1,482 views
Published

Charla presentada en la reunión quincenal de NSCoder Night Madrid. …

Charla presentada en la reunión quincenal de NSCoder Night Madrid.

En esta charla hemos revisado las principales herramientas que git nos da para solucionar conflictos. En las diapositivas y en los ejemplos nos hemos centrado en cómo resolverlos después de hacer un merge.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,482
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
17
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Resolviendo conflictos con git Alfonso Alba García @aprendegit Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 2. Conflictos • git es muy bueno incorporando el código de una rama en otra • Aún así, milagros no hace Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 3. ¿Cuándo ocurren los conflictos? • Cuando intentamos incorporar las modificaciones de un commit en otro • ¿Y cuándo ocurre eso? Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 4. ¿Cuándo ocurren los conflictos? • merge • rebase • cherry y cherry-pick Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 5. Cuando ocurre un conflicto, el repositorio queda “bloqueado” hasta que lo resolvemos Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 6. Estado del repositorio • No podemos hacer push, pull, merge ni rebase (entre otras cosas) • Sí podemos ejecutar aquellos comandos que nos permiten resolver el conflicto Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 7. Estado del repositorio$ git status# On branch menganito# You have unmerged paths.# (fix conflicts and run "git commit")## Unmerged paths:# (use "git add <file>..." to mark resolution)##! both modified: cancion_del_pirata.txt#no changes added to commit (use "git add" and/or "git commit -a")$_ Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 8. Estado del repositorio Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 9. Solución 0: La patata caliente • “Esto no es cosa mía, que lo haga otro” Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 10. Solución 0: La patata caliente git reset HEAD --hard Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 11. Demo Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 12. Resolviendo el conflicto • el fichero cancion_del_pirata.txt contiene la información que necesitamos para resolver el conflicto Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 13. Canción de manuel<<<<<<< HEADUn soneto me manda hacer Violante,en mi vida me he visto en tal aprieto;catorce versos dicen que es soneto:burla burlando van los tres delante. c Nuestros cambiosYo pensé que no hallara consonantey estoy a la mitad de otro cuarteto;mas si me veo en el primer tercetono hay cosa en los cuartetos que me espante.======= Con diez cervezas por barba,grifo en mano, a toda vela,no corta el bar, sino vuelaun borracho figurín. Los de nuestroManuel barrigas que llaman,por su estómago, el Temido, 5 compañero deen todo bar conocidodel uno al otro confín. equipo>>>>>>> fulanito Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 14. Resolviendo el conflicto ¿Y cuál era el texto original? Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 15. Resolviendo el conflicto$ git reset --hard HEAD$ git config merge.conflictstyle diff3$ git merge <branch>Auto-merging cancion_del_pirata.txtCONFLICT (content): Merge conflict in cancion_del_pirata.txtAutomatic merge failed; fix conflicts and then commit the result. Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 16. Canción de manuel<<<<<<< HEADUn soneto me manda hacer Violante,en mi vida me he visto en tal aprieto;catorce versos dicen que es soneto:burla burlando van los tres delante.Yo pensé que no hallara consonantey estoy a la mitad de otro cuarteto;mas si me veo en el primer tercetono hay cosa en los cuartetos que me espante.||||||| merged common ancestors Con diez cañones por banda,viento en popa, a toda vela,no corta el mar, sino vuelaun velero bergantín.Bajel pirata que llaman, 5por su bravura, el Temido,en todo mar conocidodel uno al otro confín.======= Con diez cervezas por barba,grifo en mano, a toda vela,no corta el bar, sino vuelaun borracho figurín.Manuel barrigas que llaman, 5por su estómago, el Temido,en todo bar conocidodel uno al otro confín.>>>>>>> fulanito Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 17. Demo Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 18. Resolviendo el conflicto • Podemos usar herramientas externas para visualizar los conflictos • Para eso usamos git mergetool • En el caso que nos ocupa, instalaremos meld Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 19. Resolviendo el conflicto • Instalación en OS-X $ brew install meld • Instalación en Linux $ aptitude install meld Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 20. Resolviendo el conflicto $ git mergetool -t meld Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 21. Resolviendo el conflicto • Una vez editado el fichero, resolvemos el conflicto ejecutando $ git add cancion_del_pirata.txt $ git commit Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 22. Resolviendo el conflicto Merge branch fulanito into menganito Conflicts: cancion_del_pirata.txt # # It looks like you may be committing a merge. # If this is not correct, please remove the file # .git/MERGE_HEAD # and try again. # Please enter the commit message for your changes. Lines starting # with # will be ignored, and an empty message aborts the commit. # On branch menganito # All conflicts fixed but you are still merging. # (use "git commit" to conclude merge) # # Changes to be committed: # # modified: cancion_del_pirata.txt # Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 23. Otras formas de resolver el conflicto Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 24. --theirs git merge -s recursive -X theirs <branch> • Esto hace que cualquier conflicto se resuelva tomando las modificaciones de la rama a incorporar Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 25. --theirs • Estamos en medio de la resolución de un conflicto que ha surgido al incorporar la rama feature/3 en develop • Para resolverlo, queremos quedarnos con la versión de la rama feature/3 $ git checkout --theirs <fichero> Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 26. --ours git merge -s recursive -X ours <branch> • Esto hace que cualquier conflicto se resuelva tomando las modificaciones de la rama a incorporar Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 27. --ours • Estamos en medio de la resolución de un conflicto que ha surgido al incorporar la rama feature/3 en develop • Para resolverlo, queremos quedarnos con la versión de la rama develop $ git checkout --ours <fichero> Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13
  • 28. Demo: Conflictos en .xib Resolviendo conflictos con git by aprendegit.com is licensed under acursodegit.com Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. aprendegit.comjueves, 4 de abril de 13