Então, eu fiz algum trabalho no repositório e, quando estou prestes a confirmar, percebo que não estou atualmente em nenhum ramo.
Isso acontece muito ao trabalhar com submódulos e eu sou capaz de resolvê-lo, mas o processo é tedioso e eu tenho pensado que deve haver uma maneira mais fácil de fazer isso.
Existe uma maneira fácil de voltar a um ramo, mantendo as alterações?
git
branch
git-checkout
Erik B
fonte
fonte
git show
orgit rev-parse HEAD
), alterne para o branch e, em seguida,git cherry-pick
seguido pelo hash de commit.git merge _hash_
git merge <hash-of-the-commit-you-just-made>
.isso me ajudou
fonte
Isso é resultado algo como isto:
Então, vamos fazê-lo:
fonte
git gc
entre executar esses dois comandos, perderia esses commits, mas, a menos que esteja executandogit gc
automaticamente, essa deve ser uma abordagem bastante livre de riscos. Eu continuaria com a resposta de babay, mas se você quiser evitar escrever dois comandos extras, acho que esse é o caminho a seguir.Deixando outro caminho aqui
fonte
Como alternativa, você pode configurar seus submódulos para que, em vez de estar no estado principal desanexado padrão, verifique uma ramificação.
Editado para adicionar:
Uma maneira é fazer checkout de um ramo específico do submódulo quando você o adiciona com o sinalizador -b:
Outra maneira é simplesmente entrar no diretório do submódulo e verificar
fonte
gitmodules
talvez?Uma maneira de acabar nessa situação é depois de fazer uma nova recuperação a partir de uma ramificação remota. Nesse caso, os novos commits são apontados por
HEAD
masmaster
não apontam para eles - estão apontando para onde estavam antes de você refazer a outra ramificação.Você pode fazer isso confirmar seu novo
master
, fazendo:Isso atualiza
master
à força para apontar paraHEAD
(sem colocá-lomaster
) e depois muda paramaster
.fonte
Recentemente, tive esse problema novamente. Já faz um tempo desde que eu trabalhei com submódulos pela última vez e depois de aprender mais sobre o git, percebi que basta verificar o ramo em que você deseja se comprometer. O Git manterá a árvore de trabalho, mesmo que você não a esconda.
Se você deseja trabalhar em uma nova ramificação, isso deve funcionar para você:
O checkout falhará se você tiver conflitos na árvore de trabalho, mas isso deve ser bastante incomum e, se isso acontecer, você pode apenas escondê-lo, soltá-lo e resolvê-lo.
Comparada à resposta aceita, essa resposta poupará a execução de dois comandos, que não levam muito tempo para serem executados. Portanto, não aceitarei essa resposta, a menos que milagrosamente receba mais votos (ou pelo menos perto) do que a resposta atualmente aceita.
fonte
O seguinte método pode funcionar:
Isso irá refazer as alterações atuais do HEAD sobre o mestre. Então você pode mudar o ramo.
Uma maneira alternativa é fazer o checkout da filial primeiro:
Em seguida, o Git deve exibir o SHA1 dos seus commits desanexados, para que você possa selecioná-los, por exemplo,
Ou você também pode mesclar o mais recente:
Para ver todas as suas submissões de diferentes ramos (para se certificar de que você tem deles), execute:
git reflog
.fonte
Eu sei que disse a Babay em 2012 que achava improvável que alguém não percebesse que não estava em um galho e se comprometesse. Isso acabou de acontecer comigo, então acho que devo admitir que estava errado, mas considerando que demorou até 2016 para que isso acontecesse comigo, você poderia argumentar que é de fato improvável.
De qualquer forma, criar um novo ramo é um exagero na minha opinião. Tudo o que tem a fazer é:
Se você não copiou o commit-sha antes de verificar o outro ramo, pode encontrá-lo facilmente executando:
fonte