Git nunca borra nada, a menos que nosotros se lo indiquemos. Cuando usamos los comandos git merge o git checkout estamos cambiando de rama o creando un nuevo commit, no borrando ramas ni commits (recuerda que puedes borrar commits con git reset y ramas con git branch -d).
Git es muy inteligente y puede resolver algunos conflictos automáticamente: cambios, nuevas líneas, entre otros. Pero algunas veces no sabe cómo resolver estas diferencias, por ejemplo, cuando dos ramas diferentes hacen cambios distintos a una misma línea.
Esto lo conocemos como conflicto y lo podemos resolver manualmente. Solo debemos hacer el merge, ir a nuestro editor de código y elegir si queremos quedarnos con alguna de estas dos versiones o algo diferente. Algunos editores de código como Visual Studio Code nos ayudan a resolver estos conflictos sin necesidad de borrar o escribir líneas de texto, basta con hacer clic en un botón y guardar el archivo.
Recuerda que siempre debemos crear un nuevo commit para aplicar los cambios del merge. Si Git puede resolver el conflicto, hará commit automáticamente. Pero, en caso de no pueda resolverlo, debemos solucionarlo y hacer el commit.
Los archivos con conflictos por el comando git merge entran en un nuevo estado que conocemos como Unmerged. Funcionan muy parecido a los archivos en estado Unstaged, algo así como un estado intermedio entre Untracked y Unstaged. Solo debemos ejecutar git add para pasarlos al área de staging y git commit para aplicar los cambios en el repositorio.
Cómo revertir un merge
Si nos hemos equivocado y queremos cancelar el merge, debemos usar el siguiente comando:
git merge --abort
Conflictos en repositorios remotos
Al trabajar con otras personas, es necesario utilizar un repositorio remoto.
-Para copiar el repositorio remoto al directorio de trabajo local, se utiliza el comando git clone <url>, y para enviar cambios al repositorio remoto se utiliza git push.
-Para actualizar el repositorio local se hace uso del comando git fetch, luego se debe fusionar los datos traídos con los locales usando git merge.
Para traer los datos y fusionarlos a la vez, en un solo comando, se usa git pull.
- Para crear commits rápidamente, fusionando git add y git commit -m "", usamos git commit -am "".
- Para generar nuevas ramas, hay que posicionarse sobre la rama que se desea copiar y utilizar el comando git branch <nombre>.
Para saltar entre ramas, se usa el comando git checkout <branch>
- Una vez realizado los cambios en la rama, estas deben fusionarse con git merge.
El merge ocurre en la rama en la que se está posicionado. Por lo tanto, la rama a fusionar se transforma en la principal.
Los merges también son commits.
Los merges pueden generar conflictos, esto aborta la acción y pide que soluciones el problema manualmente, aceptando o rechazando los cambios que vienen.
Encontré una extensión de VSCode que me pareció práctica para la visualización de ramas y realizar acciones. GIT Graph
esta chido! gracias por compartir
Genial
Resumen de la clase anterior... xD
Muerto de la risa. Genial.
bonito gráfico :) xD
Apuntes!
Excelente! Donde hiciste los apuntes...?
Muy buenos apuntes, gracias!
Hasta los mejores cometen errores, pero todo tiene solución.
Freddy se olvidó de guardar el archivo .html, y lo malo es que commiteó ese archivo todavia con el merge conflict.
Con los:
<<<<<<<HEAD=======>>>>>>> cabecera
Si les pasa esto, no entren en pánico, mientras el commit siga en nuestro repositorio local. Tienen dos formas al menos de solucionarlo, uds eligen la que mas les convenga:
Reemplazar el commit fallido
Pueden corregir el archivo (en este caso hubiera bastado con guardarlo) y luego usar
git add .git commit --amend
El --amend "suma" al commit anterior el nuevo contenido en el staging area. Asi que no se está creando un nuevo commit, si no reemplazando el último.
Borrar el commit, sin perder los cambios, arreglar y commitear de nuevo.
Bastaria con devolver el commit a la staging area, usando:
git reset HEAD~1--soft
y luego guardar el archivo y volver a hacer el commit (ya que esta vez con el reset si borraron el commit con el fallo).
Practiquenlo!, creanme que commit --amend resulta bastante útil, más de una vez habré commiteado algo, y luego me doy cuenta que me faltó algo, o algo está mal, y en vez de armar otro commit arreglando el error, podemos reemplazarlo con amend.
Espero les sirva :).
Gracias, muy buen dato!
Genial aporte! Solo como una pequeña correción, cuando dices:
"El --amend “suma” al commit anterior el nuevo contenido en el staging area."
Realmente no es del todo correcto, pues recordemos que los commits no están en Stage, sino en el repositorio. Entonces la frase correcta sería:
"El --amend “suma” al commit anterior el nuevo contenido en el repositorio local."
Lo que pensaba de los conflictos
No es broma*
Gracias a este curso ahora puedo ver que esto no es un problema
jajajajaja
Lol... JAJA
Para revertir un merge:
git merge --abort
:o coooool gracias
:0
Vengo de otros cursos de platzi, y se nota la calidad que tiene fredy de dar las clases. se mete en el cuento. le pone empatía. se emociona cuando está explicando. tiene una fluidez que genera confianza en la información que está entregando. todos los profes de alguna manera se tienen que contagiar de esto. por que aquí es donde realmente digo que me siento confiado en la inversión que realicé
Así es, vengo del curso de Consola Y terminal y Freddy explicó cosas de ese curso con mucha más energía.
Un día me salieron 54 conflictos en el mismo archivo... fue un largo día.
:o y a las 5:50 de la tarde cuando estabas a 10 minutos de salir del trabajo ahahhahahahhahhahah
Gajes del oficio
Si despues tienen mas ramas y no sabe como va su proyecto pueden usar GitKraken, es como un visor grafico de git Bash y hasta puedes hacer todo lo que haces en la linea de comandos aqui
Está genial pero solo lo utilizaré para ver gráficamente las ramas, porque es mejor trabajar desde la linea de comando.
Estuve viendo el preview de esta herramienta, se ve genial, pero no es muy pesada para el trabajo con grandes repos? lo pregunto por los efectos gráficos que tiene.
¡Hola! Comparto algunos comandos que están en el libro Pro Git, que me parecieron de mucha utilidad:
git checkout –b // creará una nueva rama y saltará a ella de forma inmediatagit branch --list // listará las ramas existentesgit branch --delete[nombreRama]// borrará la rama que se indiquegit branch –D[nombreRama]// fuerza la eliminación de ramas que aún no han sido fusionadasgit branch –v // muestra el último commit de cada ramagit branch --merged // lista las ramas que se fusionaron con la rama actualgit branch --no-merged // lista las ramas que no se han fusionado con la rama actualgit merge --abort // anula el merge y devuelve todo a como estaba antes
¡Saludos!
Estan super geniales esos atajos. saludos!
Gracias por la información 👍🏻👍🏻
Un pequeño apunte
Genial
👍
El problema que aparece en el minuto 07:50 no es realmente que el profesor haya hecho click en el lugar incorrecto. Lo que ocurrió fue que el archivo blogpost.htmlno fue guardado despues de haber arreglado los conflictos.
exactamente
En la clase anterior me salió un conflicto y entré en pánico. Ahora ya estoy con un pánico informado. Gracias!!
x2
Solo ella causo conflictos en mi vida :'(
jajajaj lo mismo digo amigo :c
Boooo!, dale git merge --abort ;D-
Los dioses del desarrollo me fallaron desde la clase anterior, pero mantuve la calma y con lo visto en esta clase, solucioné el conflicto. ¡Genial!
Para confirmar, al generarse un conflicto, este se soluciona escogiendo la parte que SI quieres y borrando la parte que NO quieres. Posteriormente a ellos hacemos un commit y con este commit finalizamos el merge ¿Estoy en lo correcto?
Hola Ricardo!
Si, y puedes volver a parte que no quieres en algún momento :D