¿Cómo elimino una confirmación de una rama?

Resuelto hap497 asked hace 15 años • 39 respuestas

¿Cómo elimino una confirmación del historial de mi sucursal? ¿ Debería usar git reset --hard HEAD?

hap497 avatar Aug 27 '09 10:08 hap497
Aceptado

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~1el 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 HEADes 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 refloga menos que haya recolectado basura en su repositorio.

gahooa avatar Aug 27 '2009 03:08 gahooa

Si aún no ha enviado el compromiso a ninguna parte, puede utilizarlo git rebase -ipara eliminarlo. Primero, averigüe qué tan atrás está ese compromiso (aproximadamente). Entonces hazlo:

git rebase -i HEAD~N

Los ~Nmedios rebasean las últimas Nconfirmaciones ( Ndebe 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.

Greg Hewgill avatar Aug 27 '2009 03:08 Greg Hewgill

Otra posibilidad es uno de mis comandos favoritos:

git rebase -i <commit>~1

Esto iniciará la rebase en modo interactivo -ien 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.

1800 INFORMATION avatar Aug 27 '2009 03:08 1800 INFORMATION