Eu apenas corri git push -f
por engano, sobrescrevendo um ramo remoto.
Original:
(remote origin:)
branch master -> commit aaaaaaa
branch foo -> commit bbbbbbb
(local)
branch master -> commit ccccccc
branch foo -> commit ddddddd
Depois git push -f
:
(remote origin:)
branch master -> commit ccccccc
branch foo -> commit ddddddd
No meu repositório local, estou trabalhando na master
ramificação, para que eu possa restaurar a ramificação master
como commit aaaaaaa
, porque posso obter commit aaaaaaa
de git reflog
. No entanto, não consegui me comprometer bbbbbbb
porque não puxei antes git push -f
.
Eu tentei git reflog
no repositório remoto, mas não há nada útil no reflog no repositório nu.
Como posso restaurar o ramo de foo
volta para confirmar bbbbbbb
no repositório remoto?
(PS eu não sei o valor real de bbbbbbb
.)
git
file-recovery
Xiè Jìléi
fonte
fonte
Respostas:
Tente isto:
Conecte-se ao controle remoto por meio do SSH.
Faça um backup de todo o repositório remoto.
Se você conhece pelo menos os primeiros caracteres
bbbbbbb
, usegit show bbbbbb
e / ougit log bbbbbb
para descobrir o hash de commit completo. (Se você precisar apenas do hash,git rev-parse bbbbbb
também funcionará, mas é sempre melhor verificar.)Se você não sabe o valor em tudo , executar
git fsck
e você deve obter uma lista de "commits pendentes". Examine cada commit usandogit show <hash>
egit log <hash>
até encontrar o correto.Atualize as referências de ramificação:
Use
git log master
egit log foo
para garantir que você restaurou os ramos corretos.fonte
git fsck
.É provável que outros serviços também forneçam tal. É um dia de poupança.
fonte