
git statusgit status para ver el estado del repositorio.Git informa que la rama main y la rama remota origin/main han divergido, lo que significa que existen commits diferentes en el repositorio local y el remoto. En concreto, el mensaje dice que hay 1 y 2 commits distintos, respectivamente.
Recomendación: En este punto, Git sugiere realizar un git pull para fusionar la rama remota con la local y tener todo sincronizado.
git pullgit pull, que intenta traer los cambios del repositorio remoto y fusionarlos con la rama local.Aquí Git muestra una advertencia: “Tu rama actual no está configurada para hacer merge”. Esto se refiere a que la configuración predeterminada para la acción de “pull” puede variar. Es posible que el usuario necesite especificar si desea hacer un merge o un rebase.
rebase o merge por defecto.git config:
git config pull.rebase false para utilizar la estrategia de merge.git config pull.rebase true para utilizar la estrategia de rebase.git config pull.ff only para que el pull aplique solo el fast-forward (avanzar directo si no hay conflictos).git pull, Git muestra un error: “fatal: Necesitas especificar cómo reconciliar las ramas divergentes.”git config --global pull.rebase false para indicar que se prefiera la estrategia de merge para reconciliar los cambios.git pull.git pull, el proceso intenta hacer una fusión automática, pero Git muestra un conflicto de fusión en el archivo README.md.README.md tanto en la rama remota como en la local, y Git no puede decidir automáticamente cómo reconciliar esos cambios.Para resolver este conflicto y finalizar el proceso de sincronización, el usuario debe:
README.md):
HEAD) y cuáles de la remota (origin/main). Los marcadores se ven como:
<<<<<<< HEAD
(cambios locales)
=======
(cambios remotos)
>>>>>>> origin/main
git add README.md
git commit -m "Resuelto el conflicto en README.md"
Este tipo de conflictos es común cuando varios desarrolladores están trabajando en el mismo proyecto y realizan cambios en los mismos archivos. La habilidad para resolver estos conflictos es clave en el trabajo colaborativo con Git.
En Git, las estrategias de merge, rebase y fast-forward se utilizan para reconciliar los cambios entre diferentes ramas o entre el repositorio local y el remoto. Cada uno de estos modos tiene consecuencias y usos específicos que afectan al historial de cambios y a la forma en que trabajamos con las ramas. Vamos a ver cada uno de estos en detalle:
El comando merge combina dos ramas creando un nuevo commit que une ambas historias. Esta es la estrategia más común y segura en Git, especialmente en equipos grandes.
merge, Git crea un nuevo commit de fusión que junta los cambios de ambas ramas.Rebase reescribe el historial de la rama al integrar los cambios de otra rama. Básicamente, toma los commits de la rama actual y los “reaplica” en la cima de otra rama, creando un historial más lineal.
rebase, los commits de la rama local se mueven al final de los commits de la rama remota, como si hubieran sido hechos después de estos.rebase evita la creación de un commit de fusión, en cambio, reorganiza los commits para crear un historial más limpio.rebase, podrías causar confusión y problemas al reescribir el historial compartido. En resumen, rebase no se recomienda para ramas que ya han sido “pushed” al repositorio remoto, a menos que sepas exactamente lo que estás haciendo.El fast-forward ocurre cuando una rama puede avanzar directamente hasta alcanzar la otra sin necesidad de crear un commit de fusión. Esto solo es posible si no se han hecho cambios adicionales en la rama base.
fast-forward simplemente avanza el puntero de la rama hasta el commit que tiene la rama con la que se desea sincronizar. Es como si moviera una marca sin crear un nuevo commit.main sin cambios adicionales en main).Merge: Es la opción más segura y más común cuando se necesita preservar el historial completo de las contribuciones y cuando se trabaja en equipo. Siempre puedes ver qué se fusionó y cuándo, y no hay riesgo de conflictos inesperados al reescribir el historial.
Rebase: Úsalo cuando estés trabajando en tu propia rama de características y quieras mantener un historial limpio antes de fusionarla con la rama principal. Es ideal para limpiar el historial antes de hacer push. Evita usar rebase si la rama ya ha sido compartida.
Fast-Forward: Es adecuado cuando no ha habido cambios en la rama base. Permite una integración rápida y limpia sin commits adicionales. Es útil cuando se desea que la integración sea lo más simple posible.
Cada uno tiene sus ventajas y desventajas, y la elección depende del flujo de trabajo y de las preferencias del equipo. Por ejemplo, muchos equipos prefieren merge para trabajo colaborativo y rebase para mantener ramas individuales más limpias.