Checkout git e Heroku
-
20-09-2019 - |
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.
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:
Para salvar a cabeça atual em um novo ramo faça isso:
git branch <new-branch-name>
Para substituir um existir ramo que você precisa usar
--force
:git branch --force <existing-branch-name>
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