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?
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 --amend
entonces 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
ogit 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
Maciej Oziębły
Si solo está en su PC local (o si nadie revisó sus cambios):
- Usar:
git log
para encontrar la confirmación que desea eliminar. Copie el hash (la secuencia larga como: e8348ebe553102018c…).
- 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
Cascanueces
Esto funciona para mí:
git log
para encontrar el compromiso que desea eliminar y copiar su hashgit rebase -i <commit_hash>~
que abre su editor de texto- en el editor de texto, cambie de
pick
adrop
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
Ali Miskeen
Estaba trabajando con un equipo recientemente y descubrí que git tiene una solución para esto
todo en este enlace
que está usando git-filter-repo
y BFG Repo-Cleaner
aquí hay un video genial para exactamente eso
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