Por favor, estou com um grande problema no meu projeto: esse é o cenário. Eu tenho um projeto xcode no GIT. Hoje percebi que o último commit quebrou alguns testes, então dei uma olhada no commit anterior. Eu usei SourceTree e este é o aviso
Fazer isso tornará sua cópia de trabalho um 'HEAD destacado', o que significa que você não estará mais em um branch. Se você quiser fazer um commit depois disso, você provavelmente vai querer fazer o checkout de um branch novamente ou criar um novo. Está tudo bem?
Trabalhei um dia inteiro e no final comprometi tudo. Então, eu precisava mesclar meu trabalho no branch de desenvolvimento, então verifiquei o branch de desenvolvimento e ... meu trabalho desapareceu instantaneamente :(
Eu sei que foi errado desligar minha CABEÇA e Sourcetree me avisou ... mas existe uma maneira de restaurar meu trabalho?
Respostas:
Se você digitar
git reflog
, ele mostrará o histórico das revisõesHEAD
apontadas. Sua cabeça destacada deve estar lá. Depois de encontrá-lo, façagit checkout -b my-new-branch abc123
ougit branch my-new-branch abc123
(ondeabc123
está o SHA-1 da CABEÇA destacada) para criar um novo ramo que aponta para sua cabeça destacada. Agora você pode mesclar essa filial quando quiser.Geralmente, se você fizer check-out de um branch após trabalhar em um head desanexado, o Git deve informar o commit do head desanexado em que você estava, para que você possa recuperá-lo se precisar. Eu nunca usei SourceTree, então não sei se ele retransmite essa mensagem. Mas se ele exibiu essa mensagem, então você deve ser capaz de usar isso para encontrar o commit e, novamente, usar
git checkout -b
ougit branch
criar um branch desse commit.fonte
fatal: A branch named 'mybranch' already exists.
Como adicionar um branch existente?git cherry-pick e5b2f7b
, ondee5b2f7b
está o SHA-1 do commit aí.No Sourcetree, você pode fazer isso usando a GUI.
Primeiro encontre o commit "perdido" procurando por uma mensagem no Histórico de Comandos (visão: Mostrar Saída de Comando). Provavelmente estará no comando "Switching Branch" após o commit que você perdeu. Nessa mensagem, espero que você veja o comentário de confirmação com um ID de confirmação 1234567.
Leve esse ID de confirmação para a próxima etapa.
Clique no botão "Branch" na barra de ferramentas superior e você deverá obter uma caixa de diálogo "New Branch" onde você pode especificar um determinado commit. Coloque aquele Commit ID lá, especifique um novo nome de branch, clique em Create Branch e você deve obter um novo branch com seu commit perdido!
fonte
Se você não deseja manter as alterações do HEAD desanexado e deseja ir para o último branch commit, use o comando abaixo diretamente.
Observação: irei deletar todas as suas alterações no HEAD desanexado.
fonte
Um colega meu acabou de passar por esta situação. No caso dele, havia commits no head destacado - eles funcionam no R-Studio-- e a ferramenta os avisou que eles poderiam criar o branch com esta e aquela referência SHA ... mas uma vez que a única opção era "Fechar" --duh !! era uma caixa de informações - eles fecharam o diálogo e perderam as informações para sempre ...
Graças ao
reflog
comando pudemos ver que as mudanças não foram perdidas. Mas, em nosso caso, ogit branch
não funcionou como esperado ... ou uma entradagit pull
bagunçou de alguma forma. Tivemos que pescar as mudanças do reflog para o branch recém-criado:que colocou todos os commits que queríamos no branch. Então, poderíamos mesclar o branch
develop
sem problemas.Apenas no caso de ser informativo para alguém, identificamos os commits no head destacado no
reflog
olhando aqueles entre os marcados com "checkout" (que identificam deslocamento de ramificação):Aqueles que queria foram
HEAD@{8}
paraHEAD@{6}
(ambos inclusive). Então, nós os obtemos por:Então, a solução usual de mesclagem e o commit final nos deixaram com o branch lost_changes hospedando o trabalho destacado que pensávamos perdido. A fusão com o desenvolvimento foi um avanço rápido desta vez.
fonte
Eu tentei este cenário, e descobri que git me diga SHA-1 do último commit:
Você viu esta mensagem?
fonte
git reflog
deve mostrar o que você precisa.cabeça destacada está bem, contanto que você queira fazer nenhuma alteração
Se você quiser reverter um commit, você pode usar git revert em um branch específico
Se você quiser trabalhar fora da cabeça destacada e fazer commits; crie um novo branch (e depois mescle-o);
fonte
git reflog
para ver o histórico.git checkout -b temp e35d2b3
aqui e35dd23 é o valor hash do seu commit.Aceite-o como uma resposta se resolver o seu problema. Caso contrário, compartilhe seu comentário.
fonte