Commit en la rama equivocada: cómo moverlo con Git
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-branchPrimer 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 HEADElige 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 --abortVerifica 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 --shortPreguntas 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.