Tudo bem, digamos que um dia fazemos algumas modificações e, quando vamos enviá-las, percebemos que estávamos trabalhando no ramo errado.
Como podemos forçar o git a mudar de ramificação sem descartar as alterações locais .
Provavelmente vou fazer isso de uma maneira ingênua enquanto espero uma resposta, mas gostaria de saber se existe um procedimento correto, pois estaria mentindo se dissesse que isso não aconteceu comigo antes ...
- Repo alterado de backup
git reset --hard
git checkout right-branch
- Restaurar alterações
git commit -m "changes"
git
git-branch
megawac
fonte
fonte
git stash
git-scm.com/book/en/Git-Tools-StashingRespostas:
Existem várias maneiras diferentes, dependendo de quanto tempo você está e em quais filiais você deseja.
Vamos cometer um erro clássico:
Então agora você deseja que essas mudanças, com as quais você ainda não se comprometeu
master
, estejam ativadasdevelop
.Se você não tem um
develop
ainda, o método é trivial:Isso cria uma nova
develop
ramificação a partir de onde você estiver agora. Agora você pode confirmar e o novo material está ativadodevelop
.Você tem um
develop
. Veja se o Git permitirá que você alterne sem fazer nada:Isso será bem-sucedido ou reclamará. Se conseguir, ótimo! Apenas cometa. Caso contrário (
error: Your local changes to the following files would be overwritten ...
), você ainda tem muitas opções.O mais fácil é provavelmente
git stash
(como postdisseram todas as outras pessoas que responderam ao clique ). Executegit stash save
orgit stash push
, 1 ou simplesmentegit stash
que é a abreviação desave
/push
:Isso confirma seu código (sim, ele realmente faz alguns commit) usando um método estranho que não é branch-y. As confirmações feitas não estão "em" nenhuma ramificação, mas agora estão armazenadas com segurança no repositório; portanto, você pode mudar de ramificação e depois "aplicar" o stash:
Se tudo correr bem, e você gostar dos resultados, deverá fazer
git stash drop
a reserva. Isso exclui a referência às confirmações estranhas não ramificadas-y. (Eles ainda estão no repositório e, às vezes, podem ser recuperados em uma emergência, mas para a maioria dos propósitos, você deve considerá-los desaparecidos nesse ponto.)A
apply
etapa faz uma mesclagem das alterações ocultas, usando o poderoso mecanismo de mesclagem subjacente do Git, o mesmo tipo de coisa usado quando você faz mesclagens de ramificações. Isso significa que você pode obter "conflitos de mesclagem" se o ramo em que você estava trabalhando por engano for suficientemente diferente do ramo em que você pretendia trabalhar. Portanto, é uma boa ideia inspecionar os resultados com cuidado antes de assumir que o stash foi aplicado corretamente, mesmo que o próprio Git não tenha detectado nenhum conflito de mesclagem.Muitas pessoas usam
git stash pop
, o que é uma abreviação degit stash apply && git stash drop
. Tudo bem, mas significa que, se o aplicativo resultar em uma bagunça, e você decidir que não deseja seguir esse caminho, não poderá recuperar o estoque facilmente. É por isso que recomendo separarapply
e inspecionar resultados,drop
somente se / quando estiver satisfeito. (É claro que isso introduz outro ponto em que você pode fazer outra pausa para o café e esquecer o que estava fazendo, voltar e fazer a coisa errada , para que não seja uma cura perfeita.)1 O
save
ingit stash save
é o verbo antigo para criar um novo esconderijo. A versão 2.13 do Git introduziu o novo verbo para tornar as coisas mais consistentespop
e adicionar mais opções ao comando de criação. A versão 2.16 do Git obsoleta formalmente o verbo antigo (embora ainda funcione no Git 2.23, que é a versão mais recente no momento em que estou editando isso).fonte
git stash
para que os commits - poisgit stash
, você recebe dois commits por entrada de stash, em um arranjo incomum - não estejam em nenhuma ramificação. Exceto em casos especiais de muito curto prazo, no entanto, geralmente prefiro fazer um commit normal. Você podegit reset --soft
ougit reset --mixed
mais tarde, ou usegit commit --amend
para afastá-lo, quando voltar a trabalhar nesse ramo. (Em Git moderna, você também pode usargit worktree add
, que pode ser uma solução ainda-melhor.)Use git stash
Empurra as alterações para uma pilha. Quando você quiser puxá-los de volta, use
Você pode até retirar itens individuais. Para remover completamente o estoque:
fonte
git stash drop
;git stash clear
limpará toda a pilha de stash, incluindo stashes possivelmente não relacionados a esse conjunto de comandos.git stash
para salvar suas alterações não confirmadasgit stash list
para listar seus stashes não solicitados salvosgit stash apply stash@{x}
onde x pode ser 0,1,2..no de esconderijos que você fezfonte
Você também pode :
Use
git stash
para arquivar suas alterações ou,Crie outra ramificação e confirme suas alterações lá e, em seguida, mescle essa ramificação em seu diretório de trabalho
fonte