24

Acabo de darme cuenta que hice un commit que incluye una contraseña. El problema es que ya subí los cambios al repositorio origen.

¿Cómo puedo repararlo sin perder los cambios que hice y sin que quede la contraseña en el historial del repositorio?

fredyfx
  • 11,989
  • 10
  • 30
  • 58
rnrneverdies
  • 16,491
  • 3
  • 49
  • 79
  • 2
    Tal vez esto pueda ayudarte: [enlace](http://es.stackoverflow.com/questions/90/c%C3%B3mo-puedo-deshacer-el-%C3%BAltimo-commit-en-git?rq=1) – Alan Dec 01 '15 at 19:51
  • 2
    Cambia la contraseña **ahora**. Ese es el primer paso. Una vez en el internet, siempre en el internet. Una vez hayas hecho esto, puedes simplemente hacer otro commit que la elimine. – Braiam Dec 01 '15 at 23:23

5 Answers5

21

Tienes que hacer de nuevo el comit, para eso puedes ver cómo acá, luego tienes que hacer push forzando tu versión:

git push -f origin master

Si alguien más ya hizo pull de esos cambios puedes generarle problemas, pero si solo estás trabajando tu con eso, es seguro.

Carlangueitor
  • 529
  • 4
  • 12
  • 3
    -1: Tu comentario final de que "es seguro" da a pensar que no pasa nada siempre y cuando estés trabajando solo. Da igual quién haya visto el commit, **debes considerar la contraseña como comprometida**. Cámbiala YA de cualquier servicio en que la utilices. – Darkhogg Dec 02 '15 at 17:36
  • Normalmente uno debería estar trabajando con algún equipo de desarrollo, así que si es así la contraseña esta en peligro :( pero de no serlo así y si es solo tu en ese proyecto, estas bien. solo haz lo que dice @Carlangueitor y listo, aunque lo que yo haría. es cambiar la contraseña en todos los sitios donde la estes utilizado!. Saludos! – Andres Felipe Williams Suarez Dec 02 '15 at 23:06
  • Claro, yo solo me refería que es seguro que no vas a generar conflictos, pero hablando de la contraseña definitivamente hay que cambiarla, aunque sea un repo privado. – Carlangueitor Dec 02 '15 at 23:09
  • no es tan claro como se debe de borrar el historial – OscarRyz Dec 07 '15 at 17:53
5

Podrías usar git rebase, para eliminar el ultimo commit.

git rebase -i HEAD~1

Debes comentar la linea de código correspondiente al commit, guardar y salir del editor.

Posteriormente ejecutar

git push -f origin master
Joel Ibaceta
  • 2,333
  • 10
  • 34
3

Para esto debes:

1) Ubica el commit del servidor. Puedes obtener los últimos 10 commits asi:

git log -10 --pretty="%H"

Eso te muestra los hash de los commits

30ace57438659c6a715db441ffc6751f385db667
484121a5ed21e8b842ffe61783fde059103185b3
996ee5f0aabd18d14a73e0181780dcc9191337f4
2b0ea751d69c84b909b3011ba5de865125d209b2

2) Ubica el punto deseado y retorna al commit deseado

git reset --hard 484121a5ed21e8b842ffe61783fde059103185b3
HEAD is now at 484121a

3) Envia los cambios al servidor de repositorio

git push --force

Y listo. Te sirve para regresar cualquier commit.

Jean
  • 70
  • 5
2

Hay que eliminar los commits de tu repositorio local y luego forzar que ese sea el último estado con la opción -f

Por ejemplo para eliminar 10 commits

git reset --hard HEAD~10

y luego forzar que ese sea el estado en origin

git push -f origin master

Más sobre como eliminar commits del historial local:

¿Cómo puedo deshacer el último commit en Git?

OscarRyz
  • 381
  • 1
  • 2
  • 14
  • Este pregunta se refiere al último commit y no a los últimos N commits. Creo que esta respuesta estaba bien en tu otra pregunta http://es.stackoverflow.com/questions/624/c%C3%B3mo-eliminar-commits-del-historial-que-ya-fueron-subidos-al-origen debe ser mantenida – Carlos Muñoz Dec 07 '15 at 18:45
  • 1
    @CarlosMuñoz Cierto... oh well :) – OscarRyz Dec 09 '15 at 19:36
0

Elimina el commit en el repositorio local pero no guarda los cambios realizados:

git reset HEAD^ --hard

Elimina el commit en el repositorio local y guarda los cambios realizados:

git reset HEAD^ --soft

Posteriormente se puede hacer push de manera forzada al repositorio remoto.

git push -f origin master
  • Tu respuesta podría mejorarse con información de apoyo adicional. Por favor, pulsa en [edit] para añadir más detalles, como citas o documentación, para que otros puedan confirmar que tu respuesta es correcta. Puedes encontrar más información sobre cómo escribir buenas respuestas [en el centro de ayuda](/help/how-to-answer). – Comunidad Jun 01 '22 at 23:26