es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo eliminar un commit específico del repositorio remoto de Git?

Accidentalmente he subido datos secretos a un repo de git privado. Afortunadamente, sólo lo usan unas pocas personas, así que busqué una guía sobre cómo eliminar un commit y decidí eliminar toda mi rama (no pasa nada, puedo rehacer el trabajo).

$ git reset --hard <last-good-commit-hash>
$ git push -f master

Revisé los logs de git para mi ID de commit malo, ¡y ya no está! Eliminé mi repo y lo volví a clonar y parece que todo está bien. No obstante, aún puedo acceder a los datos secretos en https://gitlab.com/group/project/-/commit/bad-commit-hash. Además, puedo hacer

$ git clone git@gitlab.com:group/project.git
$ cd project
$ git checkout <bad-commit-hash>
fatal: referencia no es un árbol: <bad-commit-hash>
$ git fetch --depth=1 git@gitlab.com:group/project.git <bad-commit-hash>
remote: Enumerando objetos: 18, listo.
remote: Contando objetos: 100% (18/18), listo.
remote: Comprimiendo objetos: 100% (6/6), listo.
remote: Total 6 (delta 3), reused 0 (delta 0), pack-reused 0
Desempaquetando objetos: 100% (6/6), 2.59 KB | 2.59 MiB/s, listo.
Desde gitlab.com:group/project
* branch <bad-commit-hash> -> FETCH_HEAD
$ git checkout <bad-commit-hash>
Nota: Checkout moviéndose a '<bad-commit-hash>'.

junto con un texto sobre estar en un estado HEAD separado. Si en su lugar intento hacer lo mismo en una copia local de repo recién clonada, no funciona:

$ git fetch .git <bad-commit-hash>
fatal: git upload-pack: not our ref <bad-commit-hash>
fatal: remote error: upload-pack: not our ref <bad-commit-hash>

¿Cómo es posible esto? Cómo puedo clonar el repo y el commit no existe, pero aún puedo sacarlo del mismo repo. ¿Es esto un problema específico de GitLab?

Cualquier ayuda sería muy apreciada. En este punto estoy considerando cambiar la clave y/o eliminar el proyecto completo y volverlo a crear desde mi repo local.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    La razón por la que todavía puedes acceder los datos secretos en https://gitlab.com/group/project/-/commit/bad-commit-hash es que GitLab guarda una copia de tu repositorio, incluyendo todos los commits y datos, incluso después de borrar tu rama o commit. Esto es una medida de seguridad para asegurarse de que tus datos no se pierdan y puedan ser recuperados en caso de eliminación accidental u otros problemas.

    Sin embargo, aún puedes evitar que otros accedan a tus datos secretos revocando su acceso al viejo ID de commit o configurando el repositorio en modo privado. Además, puedes rotar tu llave secreta para asegurarte de que la llave vieja ya no sea válida.

    En cuanto al problema de clonar el repositorio y no poder sacar el mismo commit, podría deberse a una variedad de razones, como problemas de red o configuración de Git. Puedes intentar clonar el repositorio en un entorno diferente o con diferentes ajustes de Git para ver si el problema persiste.

Comments are closed.