Simplemente corrí git push -f
por error, sobrescribiendo así una rama remota.
Original:
(remote origin:)
branch master -> commit aaaaaaa
branch foo -> commit bbbbbbb
(local)
branch master -> commit ccccccc
branch foo -> commit ddddddd
Después git push -f
:
(remote origin:)
branch master -> commit ccccccc
branch foo -> commit ddddddd
En mi repositorio local, estoy trabajando en la master
bifurcación, por lo que puedo restaurar la bifurcación master
para confirmar aaaaaaa
, porque puedo obtener la confirmación aaaaaaa
de git reflog
. Sin embargo, no pude comprometerme bbbbbbb
porque no tiré antes git push -f
.
He intentado git reflog
en el repositorio remoto, pero no hay nada útil en reflog en el repositorio simple.
¿Cómo puedo restablecer la rama foo
para confirmar bbbbbbb
en el repositorio remoto?
(PD: no sé el valor real de bbbbbbb
).
git
file-recovery
Xiè Jìléi
fuente
fuente
Respuestas:
Prueba esto:
Conéctese al control remoto a través de SSH.
Haga una copia de seguridad de todo el repositorio remoto.
Si conoce al menos los primeros caracteres de
bbbbbbb
, usegit show bbbbbb
y / ogit log bbbbbb
para encontrar el hash de confirmación completo. (Si solo necesita el hash,git rev-parse bbbbbb
también funcionará, pero siempre es mejor verificarlo).Si usted no sabe el valor en absoluto , ejecutar
git fsck
y usted debe obtener una lista de "colgando compromete". Examine cada confirmación usandogit show <hash>
ygit log <hash>
hasta que encuentre la correcta.Actualice las referencias de rama:
Use
git log master
ygit log foo
para asegurarse de que restauró las ramas correctas.fuente
git fsck
.Es probable que otros servicios también brinden tales servicios. Es un ahorro de día.
fuente