Eliminar confirmación del historial

5 minutos de lectura

Avatar de usuario de Serban Stoenescu
serbio stoenescu

Ingresé una mala palabra en mi código y presioné el código en la rama principal. Empujé un par de veces más después de eso para que la gente no sacara las cosas malas, pero aún puedo encontrar la palabra maldita en el historial de confirmaciones.

No quiero agregar el archivo a .gitignore porque necesitamos ese archivo.

¿Hay alguna manera de eliminar la confirmación del historial?

  • Entonces, aquí hay una sugerencia importante: siempre verifique sus confirmaciones una por una antes de enviarlas. SIEMPRE.

    – ckruczek

    17 de junio de 2015 a las 13:40


  • posible duplicado de Eliminar archivos confidenciales y sus confirmaciones del historial de Git

    – Andrés C.

    17 de junio de 2015 a las 15:13

  • Es muy divertido porque en realidad me pasó a mí también, pero no me di cuenta hasta que fue demasiado tarde y dos semanas después de la confirmación, el líder del equipo vino a mí y se sentó a hablar conmigo. xD

    – Ariel

    29 de diciembre de 2019 a las 18:54

  • Encuentra los pasos en esta respuesta.

    – Claro

    3 de noviembre a las 13:35

Avatar de usuario de David Deutsch
David alemán

Una vez que ingresa al repositorio, realmente no desea cambiar el historial. Sin embargo, si usted es absolutamente Por supuesto que nadie ha extraído/obtenido del repositorio desde su confirmación infractora, tiene 2 opciones.

Si desea eliminar el compromiso “malo” por completo (y todos los compromisos que vinieron después de eso), haga un git reset --hard ABC (asumiendo ABC es el hash del hermano mayor de la confirmación “mala”, la que desea ver como la nueva confirmación principal de esa rama). Entonces haz un git push --force (o git push -f).

Si solo desea editar esa confirmación y conservar las confirmaciones posteriores, haga un git rebase -i ABC~. Esto abrirá su editor, mostrando la lista de sus confirmaciones, comenzando con la infractora. Cambie la bandera de “pick” a “e”, guarde el archivo y cierre el editor. Luego haga los cambios necesarios en los archivos y haga un git commit -a --amendentonces hazlo git rebase --continue. Siga todo con un git push -f.

Quiero repetir, estas opciones solo están disponibles para usted si nadie ha realizado un pull o fetch que contiene su confirmación infractora. Si es así, seguir estos pasos solo empeorará las cosas.

  • Acabo de exponer mi correo electrónico privado en un repositorio recién creado por error. Uf, eso me salvó los nervios, gracias.

    – Liebster Kamerad

    11 de mayo de 2020 a las 12:38


  • si git rebase --continue o git push -f te está dando un error; consulte: stackoverflow.com/questions/30471557/… También es útil: clock.co.uk/insight/deleting-a-git-commit

    – Sagar Patel

    5 de junio de 2020 a las 1:21


Avatar de usuario de Maciej Oziębły
Maciej Oziębły

Si solo está en su PC local (o si nadie revisó sus cambios):

  1. Usar:
    git log
    

para encontrar la confirmación que desea eliminar. Copie el hash (la secuencia larga como: e8348ebe553102018c…).

  1. Usar:
    git rebase -i [hash]~
    
    : for example
    git rebase -i e8348~
    

Simplemente elimine la confirmación que no necesita y guarde el archivo.

La rebase interactiva de git también puede permitirle corregir la confirmación rota; no es necesario eliminarla.

Si envió cambios al servidor o alguien ya recibió sus cambios, nunca cambie el historial, causaría serios problemas a su equipo.

  • ¿Puede explicar qué problema grave causaría? ¿Está garantizado que suceda?

    –Steven Zhou

    12 de marzo de 2020 a las 19:07

  • Lo siento, pero “nunca” no es cierto. Nuestra gran organización tiene que usar filter-branch para recortar un repositorio inflado.

    – Sridhar Sarnobat

    23 de junio de 2020 a las 5:38

  • Forzar la inserción en una rama compartida podría eliminar el trabajo de otra persona. Incluso si no fuera así, si alguien se bifurcó de él, entonces tendría que lidiar con las múltiples versiones de la historia, asegúrese de elegir la correcta y tenga cuidado de no integrar ambas copias. No creo que sea un pecado tan grande como mucha gente parece pensar, pero cuando fuerza el empuje, asegúrese de que sea una rama de corta duración a la que solo usted escriba y asegúrese de que es poco probable que las personas hayan revisado la historia anterior o sepan cómo tratar. con este.

    – Ficticio

    30 de diciembre de 2020 a las 13:11


  • Me gustaría hacer una corrección a la respuesta. En lugar de copiar el hash que desea eliminar, debe copiar el hash principal de un paso del hash que desea eliminar, solo entonces puede eliminar el hash que desea eliminar.

    –Vijender Kumar

    22 de febrero de 2021 a las 10:21

  • Si usa TortoiseGit, las respuestas aquí son útiles: stackoverflow.com/questions/12528854/…

    – Venryx

    17 de agosto de 2021 a las 13:55

Avatar de usuario de Cascanueces
Cascanueces

Esto funciona para mí:

  1. git log para encontrar el compromiso que desea eliminar y copiar su hash
  2. git rebase -i <commit_hash>~ que abre su editor de texto
  3. en el editor de texto, cambie de pick a drop para su compromiso particular

  • Usar drop explícito es un poco más seguro que simplemente borrar la línea… Haciendo esto mejor que la respuesta aceptada. stackoverflow.com/questions/35846154/…

    – Ray Foss

    31 de marzo de 2020 a las 17:57


  • Esto parece correcto solo para confirmaciones locales sin empuje.

    – Timo

    12 de agosto de 2020 a las 18:02

  • esto funciona bien para un impulso, si nadie ha realizado la confirmación infractora localmente

    – Alex

    17 sep 2020 a las 18:36

  • @Timo En términos de ejecución de comandos, esta solución es correcta incluso en caso de que se hayan empujado las confirmaciones locales, para lo cual habrá que forzar el empuje (push -f). Sin embargo, es probable que el flujo de trabajo del equipo desaliente estas acciones porque puede causar problemas al equipo.

    – thanos.a

    3 de junio a las 7:47

  • Tuve que pasar un hash de confirmación antes de la confirmación que quería descartar para poder ver la confirmación en el editor vim.

    – apinanyogaratnam

    4 de julio a las 23:47

Avatar de usuario de Ali Miskeen
Ali Miskeen

Estaba trabajando con un equipo recientemente y descubrí que git tiene una solución para esto

todo en este enlace

https://docs.github.com/en/authentication/mantener-su-cuenta-y-datos-seguros/eliminar-datos-confidenciales-de-un-repositorio

que está usando git-filter-repo y BFG Repo-Cleaner

aquí hay un video genial para exactamente eso

https://www.youtube.com/watch?v=z8tIOYg_oho

¿Ha sido útil esta solución?