Desfaz 'git push -f' da máquina que não tem o histórico clonado

0

Então, história de fundo. Meu disco rígido morreu na máquina A. Quase todo o meu trabalho já foi enviado para o GitHub e tudo estava muito bem, salve um repositório. Então, ao perceber isso, descobri: "Ei, legal, na verdade acabei de enviar um arquivo tar das mudanças mais recentes para Guy Guyerson de qualquer maneira." Então eu pego o arquivo tar e faço algo estúpido / mostro o quanto eu sou noob do GitHub. Em vez de clonar o repositório, adicionar os arquivos atualizados e, em seguida, empurrar, penso comigo mesmo: eu deveria ser capaz de simplesmente empurrar esses arquivos, sem problemas. Então eu git init, adiciono o controle remoto e depois empurro, mas não funciona ... porque as mesclagens são estranhas. Eu sei que as fusões estão sendo ruins, então eu decido forçar esses arquivos a serem atualizados e pressionados -f. No entanto, como este é um novo diretório .git, o push substitui tudo e eu perco todo o meu histórico de commit e todos os arquivos que não estavam no tarball se foram.

Existe alguma maneira de voltar a isso, dado que a versão local atual não tem memória de todos os commits anteriores? Eu tenho o começo do hash que ele sobrescreveu, mas o controle remoto não tem memória do commit agora.

Eu acho que o acidente do HDD pode ter causado outra vítima, quando minha frustração chegou ao fim e eu só queria empurrar as atualizações enquanto ainda as tinha nessa máquina mais antiga.

Obrigado Zach

    
por Zach 08.06.2016 / 21:52

1 resposta

0

A versão online do GitHub mantém um registro dos commits antigos, eu simplesmente não sabia como acessá-los. Para quaisquer futuros leitores: se você tiver o ID de commit que você acidentalmente sobrescreveu, você pode acessá-lo assim:

link

A partir daí, você pode usar o menu suspenso Árvore / Filial para criar um novo ramo a partir desse commit. Isso pode então ser clonado em um diretório local e então você pode mesclar, etc a partir daí.

    
por 10.06.2016 / 18:07

Tags