Git modifica una confirmación anterior que ya se envió con cambios incorrectos

2 minutos de lectura

Tengo la siguiente situación con mi repositorio git

Confirmación N: Mi última confirmación (3 cambios de archivo)

Compromiso N-1: Algunos buenos compromisos (2 cambios de archivo)

Compromiso N-2: Algún compromiso problemático (2 cambios de archivos, en uno de ellos tu contraseña dice hola al mundo).

.

.

.

cometer 1

Entonces, todas esas confirmaciones ya están enviadas al repositorio remoto.

Lo que quiero lograr:

Haga que todo permanezca igual, pero modifique la confirmación remota n-2 de manera que modifique uno de los archivos y elimine el área donde no se revela la contraseña. Además, después de la actualización, la contraseña no debería estar visible en el historial de confirmaciones. Pero no quiero perder ninguno de mis cambios actuales.

  • Hablando oficialmente, dado que ya envió la contraseña de texto sin formato a GitHub, podría estar en manos de cualquier miembro de su equipo, y tal vez en cualquier parte del mundo. Debe cambiar esta contraseña inmediatamente. Luego, tal vez elimine el compromiso que contenía la contraseña, solo para que no parezca que su sitio tiene agujeros de seguridad por todas partes.

    – Tim Biegeleisen

    6 de abril de 2021 a las 6:12

  • ¡He estado lo suficiente en la industria como para pensar en cambiar la contraseña! 🙂 Gracias por la vista increíble 🙂

    – Ahmet Eroğlu

    6 de abril de 2021 a las 6:13

  • Puede hacer una reorganización interactiva para hacer que se confirme lo último, luego restablecerlo, suavizarlo y cambiarlo. O puede revertirlo con git revert, luego hacer una nueva confirmación para corregir el error. En todos los casos, deberá hacer una fuerza de empuje de git (la fuerza con arrendamiento es más segura).

    – Chris Neve

    6 de abril de 2021 a las 12:33

La herramienta moderna a utilizar en ese caso sería git filter-repoque sustituirá al antiguo git filter-branch o BFG

Ejemplo:

Para reemplazar el texto ‘contraseña’ con ‘p455w0rd’:

git filter-repo --replace-text <(echo "password==>p455w0rd") main~2..main

Pero necesitarás un git push --force para reemplazar sus confirmaciones empujadas por las confirmaciones reescritas.
Entonces, sus cambios no se pierden, pero no “todo permanece igual” exactamente, considerando que cualquier cambio de contenido en una confirmación significa técnicamente una nueva confirmación (nuevo SHA).

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad