Git School · FluxGit

Commit en la rama equivocada: cómo moverlo con Git

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

Si hiciste un commit en la rama equivocada, conserva primero una referencia a él en una rama de rescate. Aplica su cambio a la rama correcta con cherry-pick y revisa el resultado. Solo después corrige la rama original: reset puede servir para una punta privada; una rama compartida suele necesitar revert. Son dos decisiones distintas.

Ejemplo y condiciones

El ejemplo parte de un caso concreto: un único commit normal, sin merge, en la punta de main, que corresponde a una rama feature/fix ya existente. El árbol de trabajo está limpio. Sustituye estos nombres por los tuyos. Si hay varios commits, un merge o trabajo posterior, identifica el rango exacto antes de usar el reset del ejemplo.

Inspecciona antes de cambiar

Lee el estado, la rama actual y el grafo reciente. Revisa los archivos y el patch del commit, no solo su título: puede mezclar tareas o trabajo de otras personas. Guarda su ID completo en SCHOOL_MISTAKE para identificarlo después de cambiar de rama. Averigua si alguien ya lo recibió antes de elegir la reparación de main.

git status --short
git branch --show-current
git log -5 --oneline --decorate
git show --stat HEAD
SCHOOL_MISTAKE=$(git rev-parse HEAD)

Conserva una referencia o checkout separado

La rama de rescate mantiene accesible el objeto del commit; no copia cambios sin commit. Si hay trabajo local, guárdalo y compruébalo aparte mediante un commit deliberado, un stash revisado o una copia externa. Stash con -u incluye archivos sin seguimiento, pero no ignorados. Reflog no conserva automáticamente el contenido de esos archivos sin guardar.

git branch rescue/wrong-branch "$SCHOOL_MISTAKE"
git show --stat rescue/wrong-branch

Primer flujo

Cambia a la rama de destino y ejecuta cherry-pick con el ID guardado. Git aplica el cambio y normalmente crea un commit nuevo con otro ID, porque su padre es distinto. Revisa el patch y ejecuta las comprobaciones pertinentes del proyecto. No elimines el commit de la rama original hasta verificar el destino y conservar la referencia de rescate.

git switch feature/fix
git cherry-pick "$SCHOOL_MISTAKE"
git show --stat HEAD

Elige deliberadamente la otra opción

Solo para una punta privada, vuelve a main y comprueba que HEAD sigue siendo SCHOOL_MISTAKE. Con el árbol limpio y la rama de rescate conservada, reset al padre quita ese commit de main. El reset duro también reemplaza archivos con seguimiento. Si main avanzó o el commit se compartió, esta secuencia concreta deja de ser adecuada.

git switch main
git status --short
git rev-parse HEAD
git reset --hard "${SCHOOL_MISTAKE}^"

Límites y excepciones

Si el error llegó a una rama compartida, prefiere un revert normal en esa rama. Añade un commit que invierte el cambio sin borrar el historial ajeno. El cherry-pick del destino y el revert del origen necesitan revisiones separadas. Coordina cualquier integración posterior con el equipo; esta guía no autoriza un force push automático.

git switch main
git revert "$SCHOOL_MISTAKE"

Conflictos y limpieza

Cherry-pick puede detenerse por conflictos. Lee status, resuelve los archivos pertinentes, añádelos y continúa; usa cherry-pick --abort si elegiste mal el cambio o el destino. Revert tiene sus propios comandos de continuación y cancelación. Cancelar una operación activa no es una copia general de seguridad de modificaciones realizadas fuera de ella.

git status
git cherry-pick --abort
git revert --abort

Verifica el resultado

El grafo final debe mostrar el cambio en feature/fix y la corrección elegida en main. Compara ambos patches y revisa el estado de cada checkout. Conserva rescue/wrong-branch hasta completar la revisión. Un estado limpio no demuestra por sí solo que la aplicación sigue funcionando; comprueba también el comportamiento afectado.

git log -6 --oneline --decorate --all
git show --stat feature/fix
git status --short

Preguntas habituales

¿Varios commits? Revisa primero su orden, dependencias y rango. ¿Reset --soft? Mueve la rama manteniendo índice y archivos, pero no traslada por sí solo un commit a otra rama. ¿Ya lo publicaste? Parte del caso de revert para historial compartido y acuerda explícitamente cualquier reescritura excepcional.

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