Git School · FluxGit

Tu rama Git ha divergido: elegir merge o rebase

FluxGit ·

Los bloques son casos distintos, no un único script. Elige el que encaja con tu repositorio. Sustituye ramas, rutas y VERIFIED_COMMIT antes de usarlos. Los comandos de cancelación solo corresponden a su operación activa; no ejecutes ambas alternativas.

Respuesta breve

Una rama diverge cuando su punta local y la referencia upstream tienen commits ausentes en el otro lado. Haz fetch, inspecciona ambos y elige cómo combinarlos. Merge conserva sus historiales; rebase reaplica los commits locales sobre el upstream y cambia sus IDs. El aviso describe el grafo, no demuestra que se hayan perdido archivos.

Ejemplo y condiciones

El ejemplo es main siguiendo origin/main, con dos commits locales y uno remoto. Verifica los nombres reales de tu rama y upstream. Fetch actualiza la referencia de seguimiento remoto, pero no integra por sí solo ese historial en tu rama. Un remoto con otro nombre o una rama sin upstream necesita comandos ajustados.

Inspecciona antes de cambiar

Lee status y branch -vv antes de fetch origin. El conteo izquierdo/derecho de HEAD...origin/main indica commits exclusivos de cada lado. Inspecciona el grafo y cada patch: dos frente a uno no dice si editan la misma función. Una referencia remota desactualizada o un conteo aislado no bastan para diagnosticar la divergencia.

git status --short
git branch -vv
git fetch origin
git rev-list --left-right --count HEAD...origin/main
git log --oneline --graph --decorate HEAD origin/main

Conserva una referencia o checkout separado

Antes de integrar, crea rescue/before-sync en la punta local y guarda cambios sin commit aparte. La rama conserva historial confirmado; un stash comprobado tiene cobertura distinta para archivos seguidos, nuevos e ignorados. Verifica lo guardado. Mezclar trabajo local ajeno con merge o rebase hace más difícil comprender conflictos y recuperación.

git branch rescue/before-sync HEAD

Primer flujo

Elige merge cuando conviene conservar el historial, especialmente si los commits locales ya se compartieron. Merge origin/main combina el upstream descargado con la rama actual y normalmente conserva ambos padres cuando hay divergencia. Revisa el diff y las comprobaciones del proyecto antes de publicar. Un merge completado no garantiza que el código combinado funcione.

git merge origin/main

Elige deliberadamente la otra opción

Elige rebase para commits locales que la política del equipo permite reescribir. Rebase origin/main reaplica ese trabajo sobre la punta descargada, normalmente con IDs nuevos. Si se compartió, otras personas pueden depender de los IDs antiguos. Un grafo más lineal no concede permiso para reescribir una rama compartida ni saltarse su protección.

git rebase origin/main

Límites y excepciones

En un conflicto de merge, revisa status, resuelve y prepara los archivos, y termina la integración; merge --abort abandona esa operación cuando sus condiciones lo permiten. En rebase, resuelve el conflicto actual y usa rebase --continue; puede detenerse varias veces. Para abandonar ese rebase usa rebase --abort, sin mezclar ambos flujos.

git status
git merge --abort
git rebase --abort

Conflictos y limpieza

Reset --hard origin/main no es una respuesta genérica a la divergencia: quita de esa rama su historial local separado y puede sobrescribir archivos seguidos. Es la decisión distinta de abandonar trabajo. Aquí combinamos historiales deseados. Si quieres descartar commits locales, revísalos y conserva las copias necesarias mediante otro procedimiento.

Verifica el resultado

Revisa grafo, estado y diferencia respecto a origin/main, y ejecuta las comprobaciones pertinentes. Un push normal puede rechazarse si el remoto avanzó tras fetch. Descarga y revisa otra vez ese nuevo estado; no escales automáticamente a force push. Conserva la referencia de rescate hasta revisar los efectos de la integración.

git status --short
git log -8 --oneline --graph --decorate
git diff origin/main HEAD

Preguntas habituales

¿Por qué pull pide una estrategia? Incluye fetch y una integración que puede ser ambigua sin política. ¿Merge evita conflictos? No: ambos métodos pueden encontrarlos. ¿Rebase siempre es mejor? No; importa si los commits se compartieron y qué historial acordó conservar el equipo.

Revisa la operación en FluxGit

Usa el historial visual y la vista de cambios de FluxGit para revisar la operación y los commits pertinentes. Conserva las comprobaciones de rama, historial compartido y archivos locales del ejemplo. La página de descarga muestra las versiones y plataformas disponibles.

Documentación oficial de Git

Flujos relacionados

Descargar FluxGit