Pergunta

Criei um repo Git local no meu laptop e depois empurrei a fonte para o Heroku, criando um ramo remoto. Depois de alguns dias de commits e empurrões, preciso reverter para um compromisso anterior. Aqui está o que eu fiz.

cd <app root>
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73 

Alguém me disse que fazer o checkout criou uma nova árvore de trabalho e não o próprio ramo; portanto, quando empurrei a reversão para o Heroku, ele disse que tudo está atualizado e que nada foi empurrado. Como faço para consertar essa situação? Obrigado pela sua ajuda antecipadamente.

Foi útil?

Solução

Ao verificar um nome de comércio direto (usando o hash sha-1 do objeto Commit) em vez de verificar um nome de ramificação, você acaba com uma "cabeça isolada". Head é o "REF" que acompanha o que está atualmente checado. Ele fica desapegado quando você consulte diretamente uma confirmação em vez de uma ramificação (não está anexada a nenhuma ramificação). Nenhuma ramificação é atualizada quando você destaca a cabeça de um repositório. Você pode pensar no estado da cabeça isolada como se tivesse uma filial anônima.


Para recolocar a cabeça do seu repositório, você deseja salvar a cabeça atual como uma ramificação e verifique essa ramificação:

  1. Para salvar a cabeça atual em um novo ramo faça isso:

    git branch <new-branch-name>
    
  2. Para substituir um existir ramo que você precisa usar --force:

    git branch --force <existing-branch-name>
    
  3. Em seguida, refira a cabeça do seu repositório verificando a nova/atualizada ramo:

    git checkout <branch-name>
    

    (Onde <branch-name> é o mesmo que <new-branch-name> ou <existing-branch-name>, dependendo de quais dos dois comandos acima você usou)

Esta sequência (git branch Para fazer um ref apontar para o comprometimento atual da cabeça, então git checkout essa filial atualizada) levará adiante qualquer conteúdo não comprometido que você possa ter no seu índice de trabalho e/ou árvore.


No futuro, se você quiser 'reverter' a filial atual para algum compromisso anterior, você deve usar isso ao invés de Desapetar a cabeça do seu repositório:

git reset --hard <commit>

Isso redefinirá o ramo atual (ou sua cabeça destacada, se já estiver desapegada) para o comprometimento nomeado, e fará com que o índice e a árvore de trabalho reflitam esse comprometimento (ou seja, ele lança qualquer compromisso, já que o comprometimento especificado junto com qualquer conteúdo não comprometido ).

O estado da cabeça destacado é útil para revisitar os estados antigos e, às vezes, para trabalhos de curto prazo que você não tem certeza de que manterá. Fora isso, você provavelmente deseja evitá -lo.

Outras dicas

Você quer redefinir:

git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top