Sobes.tech
Middle

¿Cuál es la diferencia entre los comandos merge y rebase en el sistema de control de versiones Git?

sobes.tech AI

Respuesta de la IA

merge combina ramas creando un nuevo commit con dos padres, preservando la historia de cambios. rebase traslada los commits de una rama sobre otra, ordenando linealmente la historia, pero cambiando los hashes de los commits.

  • En merge:

    • Se crea un nuevo commit de fusión.
    • La historia de las ramas permanece explícita.
    • Pueden surgir conflictos, que se resuelven en el nuevo commit.
    # Ejemplo de uso de merge
    git checkout rama-funcionalidad
    git merge main
    # Resolución de conflictos, si los hay
    git commit -m "Fusionar main en rama-funcionalidad"
    
  • En rebase:

    • Los commits "se trasladan" y se aplican sobre la rama objetivo.
    • La historia se vuelve lineal, puede parecer "más limpia".
    • Los hashes de los commits trasladados cambian.
    • Puede surgir un conflicto para cada commit trasladado.
    • No se recomienda para ramas que ya han sido publicadas y usadas por otros desarrolladores, ya que modifica la historia.
    # Ejemplo de uso de rebase
    git checkout rama-funcionalidad
    git rebase main
    # Resolución de conflictos, si los hay (repetir para cada commit conflictivo)
    git add .
    git rebase --continue
    # o git rebase --skip para omitir el commit
    # o git rebase --abort para cancelar
    
Característica merge rebase
Cambio en la historia Mantiene la historia La modifica (sobrescribe)
Commits Crea un commit de merge Traslada commits existentes
Linealidad de la historia No (las ramas divergen) Sí (simplifica la historia)
Enfoque No destructivo Potencialmente destructivo
Aplicabilidad Ramas públicas y compartidas Ramas locales y personales