¿Cómo puedo recuperarme de un git push -f origin master erróneo?
Acabo de enviar la fuente incorrecta a mi proyecto usando --force
la opción.
¿Es posible revertir? Entiendo que todas las ramas anteriores se han sobrescrito usando -f
la opción, por lo que es posible que haya arruinado mis revisiones anteriores.
Por lo general, Git no desecha nada, pero recuperarse de esto aún puede ser complicado.
Si tiene la fuente correcta, puede simplemente insertarla en el control remoto con la --force
opción. Git no habrá eliminado ninguna rama a menos que usted se lo indique. Si realmente ha perdido confirmaciones, consulte esta útil guía para recuperar confirmaciones . Si conoce el SHA-1 de las confirmaciones que desea, probablemente esté bien.
Lo mejor que puedes hacer: hacer una copia de seguridad de todo y ver qué hay todavía en tu repositorio local. Haga lo mismo en el control remoto si es posible. Usa git fsck
para ver si puedes recuperar cosas, y sobre todo NO ejecutesgit gc
.
Por encima de todo, nunca uses la --force
opción a menos que realmente lo digas en serio.
Si conoce el hash de confirmación, es fácil: simplemente vuelva a crear su rama.
5794458...b459f069 master -> master (forced update)
Eliminar la rama remota:
git push origin :master
luego recrea tu rama con los siguientes comandos:
git checkout 5794458
git branch master
git push origin master
La solución ya está mencionada 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 desired 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
Sí, puedes recuperar confirmaciones despuésgit push -f your_branch
Texto del doctor :
Elimine las entradas anteriores al tiempo especificado. Si no se especifica esta opción, el tiempo de vencimiento se toma de la configuración gc.reflogExpire, que a su vez tiene un valor predeterminado de 90 días. --expire=todas las entradas de ciruelas pasas independientemente de su edad; --expire=nunca desactiva la eliminación de entradas accesibles (pero consulte --expire-unreachable).
Entonces puedes hacer:
1-git reflog
2- eliges Head_Number con el que quieres recuperargit reset –hard HEAD@{HEAD-NUMBER}
3- puedes ver todas las confirmaciones en este encabezado por git cherry -v branch_name
4- al final debes forzar el empujegit push -f branch_name
O
1- obtenga el número de SHA de su cliente GIT (interfaz)
git reset --hard commit_SHA
2- fuerza de empuje
git push -f your_branch
Espero que esto ayude