2010-06-10 101 views
34

Un miembro del equipo accidentalmente empujó medio gig de cremalleras indeseadas al repositorio remoto anoche cuando estaban apurados. Sí ... oops.¿Puedo deshacer el último git push?

Nadie ha tirado o cometido desde entonces.

Lo ideal es que simplemente 'deshacer' lo que sucedió.

He mirado filtro de la rama y estaba pensando en probar algo así como

git filter-branch --tree-filter 'rm -f *.zip' HEAD 

pero eso sería locales, y no puedo encontrar la manera de hacerlo directo en el repositorio remoto.

¿Hay alguna forma más sencilla de deshacer lo que sucedió? Si modifica su último compromiso y empuja nuevamente, ¿eso deshará el impulso, es decir, eliminará esos archivos de la historia?

Obviamente, si ella las elimina, confirma y vuelve a presionar, eso deja el contenido en el repositorio, lo cual no es bueno.

+0

Hay preguntas similares que tal vez podrían ayudar: http://stackoverflow.com/questions/1270514/undoing-a-git-push – Don

Respuesta

53

Gracias Don, lo había visto pero de alguna manera no me había dado cuenta de que solucionaba mi problema, porque solo tengo una rama.

lo hice:

git push -f origin 5910117a8fc2c71334251465b54d6d9daeb28d1c:master 

Y todo es volver a ser como era.

+0

que funciona bien. tal vez desee tomarse un momento para pensar si dejar que alguien con acceso al repositorio sea capaz de hacerlo es bueno o no :) ir directamente al repositorio remoto y usar git reset para mover su rama maestra es otra alternativa que generalmente puede omitir las verificaciones de permisos implementadas en los ganchos. – araqnid

+7

Es posible que desee agregar: git reset --hard 5910117a8fc2c71334251465b54d6d9daeb28d1c Eso asegurará que su copia local también se revierte a esa revisión específica (de lo contrario, parecerá que su repositorio local difiere del remoto). –

+12

aclaración: el sha hash debería ser el hash del último COMIENZO BUENO - no su compromiso malo empuje – philfreo

5

creo

git reset --hard HEAD^ 
git push -f 

debe al truco: Se restablece el proceso de pago local para la confirmación anterior (suponiendo que el último es el que usted quiere eliminar) y la fuerza que empuja al repositorio remoto.