¿Cómo puedo recuperarme de un git push -f origin master erróneo?

Resuelto David van Dugteren asked hace 14 años • 10 respuestas

Acabo de enviar la fuente incorrecta a mi proyecto usando --forcela opción.

¿Es posible revertir? Entiendo que todas las ramas anteriores se han sobrescrito usando -fla opción, por lo que es posible que haya arruinado mis revisiones anteriores.

David van Dugteren avatar Oct 20 '10 07:10 David van Dugteren
Aceptado

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 --forceopció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 fsckpara ver si puedes recuperar cosas, y sobre todo NO ejecutesgit gc .

Por encima de todo, nunca uses la --forceopción a menos que realmente lo digas en serio.

Cameron Skinner avatar Oct 20 '2010 01:10 Cameron Skinner

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
user1094125 avatar Jun 23 '2014 19:06 user1094125

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
Abdelhafid avatar Feb 16 '2017 10:02 Abdelhafid

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

ingrese la descripción de la imagen aquí

2- eliges Head_Number con el que quieres recuperargit reset –hard HEAD@{HEAD-NUMBER}

ingrese la descripción de la imagen aquí

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

يعقوب avatar Nov 20 '2019 09:11 يعقوب