Isso geralmente acontece comigo: escrevo um código, vou verificar minhas alterações e depois percebo que não estou no ramo apropriado para verificar essas alterações. No entanto, não posso mudar para outro ramo sem que minhas alterações sejam revertidas. Existe uma maneira de mover as alterações para outro ramo a ser verificado lá?
422
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> Aborting
Se você ainda não confirmou suas alterações , use-o
git checkout
para ir para o novo ramo e depois enviá-las normalmente - as alterações nos arquivos não estão vinculadas a um ramo específico até que você as confirme.Se você tiver já se comprometeu suas alterações:
git log
e lembre-se do SHA do commit que você deseja mover.git cherry-pick SHA
substituindo o SHA de cima.git reset HEAD~1
para redefinir novamente antes de confirmar o ramo errado.cherry-pick
pega uma confirmação e aplica-a ao cabeçalho com saída atualmente permitida, permitindo copiar a confirmação para uma nova ramificação.fonte
git reset HEAD~N --soft
e depoisgit checkout -b
mover todo o código não confirmado agora para um novo ramo.Infelizmente isso acontece comigo com bastante regularidade e eu uso
git stash
se percebi meu erro antesgit commit
e usogit cherry-pick
, caso contrário, os dois comandos são explicados muito bem em outras respostasDesejo adicionar um esclarecimento para
git checkout targetBranch
: este comando preservará apenas o diretório de trabalho e o instantâneo em etapas se targetBranch tiver o mesmo histórico que sua ramificação atual@ A declaração de Amber não é falsa quando você passa para um newBranch ,
git checkout -b newBranch
um novo ponteiro é criado e está apontando exatamente para o mesmo commit que o seu ramo atual.De fato, se você tiver uma outra ramificação que compartilhe o histórico com sua ramificação atual (ambas apontam para o mesmo commit), você pode "mover suas alterações"
git checkout targetBranch
No entanto, geralmente ramificações diferentes significam histórico diferente, e o Git não permitirá que você alterne entre essas ramificações com um diretório de trabalho ou área de preparação suja. nesse caso, você pode fazer
git checkout -f targetBranch
(alterações limpas e descartáveis) ougit stage
+git checkout targetBranch
(limpar e salvar alterações); simplesmente executargit checkout targetBranch
gera um erro:fonte
Uma redefinição suave do git colocará as alterações confirmadas novamente no seu índice. Em seguida, faça o checkout do ramo em que você pretendia se comprometer. Em seguida, git commit com uma nova mensagem de commit.
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
Dos documentos do git :
fonte