¿Cómo puedo recuperarme de un maestro de origen erróneo de git push -f?

Acabo de asignar la fuente incorrecta a mi proyecto usando la opción --force .

¿Es posible revertir? Entiendo que todas las twigs anteriores se han sobrescrito utilizando la opción -f , por lo que puede haber estropeado mis revisiones anteriores.

Git generalmente no tira nada, pero recuperarse de esto puede ser complicado.

Si tiene la fuente correcta, puede empujarla al control remoto con la opción --force . Git no habrá eliminado ninguna twig a less que se lo haya indicado. Si ha perdido confirmaciones, eche un vistazo a esta guía útil para recuperar compromisos . Si conoce el SHA-1 de las confirmaciones que desea, entonces probablemente esté bien.

Lo mejor que puede hacer: respalde todo y vea lo que todavía está en su repository local. Haz lo mismo en el control remoto si es posible. Use git fsck para ver si puede recuperar cosas, y sobre todo NO ejecute git gc .

Por encima de todo, nunca uses la opción --force less que realmente lo digas en serio.

Si conoce el hash de confirmación, es fácil, solo recree su twig.

 5794458...b459f069 master -> master (forced update) 

Eliminar la twig remota:

 git push origin :master 

luego recrea tu twig con los siguientes commands:

 git checkout 5794458 git branch master git push origin master 

La solución ya se menciona aquí

 # work on local master git checkout master # reset to the previous state of origin/master, as recorded by reflog git reset --hard origin/master@{1} # at this point verify that this is indeed the desinetworking commit. # (if necessary, use git reflog to find the right one, and # git reset --hard to that one) # finally, push the master branch (and only the master branch) to the server git push -f origin master 

Hice lo mismo mientras deshace un último impulso para un solo file. Terminó volviendo al estado original del repository. Estaba usando commands git de Linus porque tenía la copy local en Linux. Afortunadamente, esa copy todavía estaba intacta.

Todo lo que hice fue (después de hacer frenéticamente algunas copys más del repository local):

 git add . git status 

(decía que el origen / maestro estaba adelantado por 68 commits, bueno … esos fueron todos los commits que eliminé)

 git remote set-url origin <GIT_SSH_URL> git push 

Y todo se restableció como estaba antes de que lo empujara con fuerza. Lo más importante para recordar es nunca hacer un pago por git. después de que empujaste forzadamente Pero la mejor práctica es desactivar la opción de inserción. Nunca lo volveré a usar nunca más. ¡Aprendí mi lección!