Eliminar commit intermedio git
Contenidos
Si accidentalmente has confirmado algo que no debías, y lo has subido a Github, todavía hay formas de borrarlo o modificarlo. Por lo general, no quieres meterte con el historial de Git, pero en algunos casos puede ser seguro si se hace correctamente.
Eliminar confirmaciones del historial de Git es generalmente una mala idea. Git está pensado para rastrear cada versión de tus archivos, y siempre hay alternativas a la eliminación, como git revert, que mantendrán el historial intacto.
Una vez que está en un repositorio remoto, como Github, es mucho más difícil deshacerse de la confirmación por completo. Esto se debe a que cualquier otra persona que utilice el repositorio tendrá su propia copia local de ese repositorio, y borrar a la fuerza una confirmación hará que se desincronicen.
Todavía hay algunas razones para hacer esto, sin embargo, tal vez accidentalmente confirmó datos privados a un repositorio público, que seguiría siendo visible en la historia no importa lo que hagas. Causará algunos problemas a sus compañeros de trabajo, pero incluso en este caso es posible con un push forzado.
Si estás trabajando localmente, y aún no has empujado tus cambios a Github, puedes restablecer o modificar con seguridad los commits que no están en el remoto. Git rastrea tu directorio local, escenifica los cambios internamente y mantiene un historial Git. Todo esto se mantiene sincronizado con el remoto, pero sólo cuando se ejecuta push/pull. A Github no le importa el estado de tu repositorio hasta que lo envías.
Git eliminar primer commit
Para eliminar el último commit de git, puedes simplemente ejecutar git reset –hard HEAD^ Si estás eliminando varios commits desde el principio, puedes ejecutar git reset –hard HEAD~2 para eliminar los dos últimos commits. Puedes aumentar el número para eliminar aún más confirmaciones.
Si quieres “descomprometer” las confirmaciones, pero mantener los cambios para volver a trabajarlos, elimina el “–hard”: git reset HEAD^ que eliminará las confirmaciones de la rama y del índice, pero dejará el árbol de trabajo.
Los commits antiguos que ya no formen parte de ninguna rama se recolectarán, normalmente en 30 días más o menos. Es muy probable que el commit ya no esté ahí @nmz787-intel. Si buscas cómo se hace la recolección de basura, tal vez puedas encontrar una manera de borrarlo.
Git eliminar todos los commits anteriores
Tal vez git revert sea lo que necesito, pero no quiero terminar 10 commits por delante del origen (o incluso seis), incluso si eso devuelve el código al estado correcto. Sólo quiero fingir que la última media hora nunca sucedió.
git reset –hard @{u}* borra todos tus cambios locales en la rama actual, incluyendo los commits. Me sorprende que nadie haya publicado esto todavía teniendo en cuenta que no tendrás que buscar a qué commit revertir o jugar con las ramas.
El procedimiento anterior funciona bien hasta VS2019; en VS2022 existe la Nueva Experiencia Git. El flujo de trabajo es similar, pero la interfaz de usuario es un poco diferente. En lugar del Explorador de Equipos, utiliza Gestionar Ramas desde el menú Git. Ahora sólo tienes que hacer clic en una rama a la izquierda y su historia se muestra a la derecha. Luego haz clic con el botón derecho -> Restablecer -> Eliminar cambios (–difícil)
En mi experiencia, Eclipse maneja bastante bien los cambios a su alrededor. Sin embargo, puede que necesite seleccionar los proyectos afectados en Eclipse y limpiarlos para forzar a Eclipse a reconstruirlos. Supongo que otros IDEs pueden necesitar una reconstrucción forzada también.
Cómo borrar un commit en gitlab
Este es un caso para el comando “git revert”. Curiosamente, el comando no borra nada; crea una nueva confirmación que introduce cambios que revierten los efectos de la confirmación especificada. Nuestro post explica los detalles de cómo revertir confirmaciones.
En ese caso, tendremos que sacar la artillería pesada: La herramienta “Interactive Rebase” de Git es lo que necesitamos aquí. Ten en cuenta que éste no es sólo el más potente, sino también el más peligroso de los tres comandos listados aquí. Esto se debe a que te permite cambiar tu historial de confirmaciones de forma drástica, lo cual es un proceso peligroso.
En caso de que estés utilizando el cliente Tower Git, no sólo “reset” y “revert” son fácilmente accesibles. Tower también te permite acceder a herramientas avanzadas como “interactive rebase” muy fácilmente, por ejemplo para borrar un commit (y si cometiste un error, ¡puedes deshacerlo simplemente pulsando CMD+Z!).

