¿Cómo elimino una confirmación de una rama?
¿Cómo elimino una confirmación del historial de mi sucursal? ¿ Debería usar git reset --hard HEAD
?
Cuidado: git reset --hard
BORRARÁ LOS CAMBIOS DE SU DIRECTORIO DE TRABAJO . Asegúrese de guardar cualquier cambio local que desee conservar antes de ejecutar este comando.
Suponiendo que esté sentado en ese compromiso, entonces este comando lo eliminará...
git reset --hard HEAD~1
Significa HEAD~1
el compromiso antes del encabezado.
O bien, puede mirar el resultado de git log
, buscar el ID de confirmación de la confirmación de la que desea realizar la copia de seguridad y luego hacer esto:
git reset --hard <sha1-commit-id>
Si ya lo empujaste, necesitarás hacer un empujón fuerte para deshacerte de él...
git push origin HEAD --force
Sin embargo , si otros lo han hecho, sería mejor que iniciaras una nueva sucursal. Porque cuando tiren, simplemente lo fusionará con su trabajo y usted lo volverá a empujar hacia arriba.
Si ya presionó, puede ser mejor usar git revert
, para crear una confirmación de "imagen reflejada" que deshará los cambios. Sin embargo, ambas confirmaciones estarán en el registro.
Para su información: git reset --hard HEAD
es genial si desea deshacerse del TRABAJO EN CURSO. Lo restablecerá a la confirmación más reciente y borrará todos los cambios en su árbol de trabajo e índice.
Por último, si necesita encontrar una confirmación que "eliminó", normalmente estará presente git reflog
a menos que haya recolectado basura en su repositorio.
Si aún no ha enviado el compromiso a ninguna parte, puede utilizarlo git rebase -i
para eliminarlo. Primero, averigüe qué tan atrás está ese compromiso (aproximadamente). Entonces hazlo:
git rebase -i HEAD~N
Los ~N
medios rebasean las últimas N
confirmaciones ( N
debe ser un número, por ejemplo HEAD~10
). Luego, puede editar el archivo que Git le presenta para eliminar la confirmación infractora. Al guardar ese archivo, Git reescribirá todas las confirmaciones siguientes como si la que eliminó no existiera.
El Git Book tiene una buena sección sobre rebase con imágenes y ejemplos.
Sin embargo, tenga cuidado con esto, porque si cambia algo que ha impulsado en otra parte, será necesario otro enfoque a menos que esté planeando hacer un impulso forzado.
Otra posibilidad es uno de mis comandos favoritos:
git rebase -i <commit>~1
Esto iniciará la rebase en modo interactivo -i
en el punto justo antes de la confirmación que desea eliminar. El editor comenzará a enumerar todas las confirmaciones desde entonces. Elimine la línea que contiene la confirmación que desea borrar y guarde el archivo. Rebase hará el resto del trabajo, eliminando solo esa confirmación y reproduciendo todas las demás en el registro.