Comecei a trabalhar em um novo recurso e, depois de codificar um pouco, decidi que esse recurso deveria estar em seu próprio ramo.
Como mover as alterações não confirmadas existentes para uma nova ramificação e redefinir a atual?
Quero redefinir minha ramificação atual, preservando o trabalho existente no novo recurso.
git
git-branch
git-stash
git-reset
Dane O'Connor
fonte
fonte
Respostas:
Use o seguinte:
Isso deixará sua ramificação atual como está, criará e retirará uma nova ramificação e manterá todas as suas alterações. Em seguida, você pode preparar alterações nos arquivos para confirmar:
e comprometa-se com seu novo ramo com:
As alterações no diretório de trabalho e as alterações realizadas no índice ainda não pertencem a nenhuma ramificação . Isso altera a ramificação onde essas modificações terminariam.
Você não redefine sua ramificação original, ela permanece como está. A última confirmação
<old-branch>
ainda será a mesma. Portanto, vocêcheckout -b
e depois se compromete.Atualização 2020 / Git 2.23
O Git 2.23 adiciona o novo
switch
subcomando na tentativa de eliminar parte da confusão resultante do uso sobrecarregado decheckout
(alternar ramificações, restaurar arquivos, desanexar HEAD etc.)Começando com esta versão do Git, substitua o comando acima por:
O comportamento é idêntico e permanece inalterado.
fonte
git checkout -b <new branch>
altera onde essas alterações terminaria no.git checkout .
/git reset --hard
vai unrecoverably remover -losAlternativamente:
Salve as alterações atuais em um stash temporário:
$ git stash
Crie uma nova ramificação com base nesse stash e alterne para a nova ramificação:
$ git stash branch <new-branch> stash@{0}
Dica: use a tecla Tab para reduzir a digitação do nome do stash.
fonte
git stash apply
.git checkout -b <new branch name>
git add -A
antes de guardar.Se você fez commits em sua ramificação principal enquanto codificava, mas agora deseja movê-las para uma ramificação diferente, esta é uma maneira rápida:
Copie seu histórico atual para uma nova ramificação, trazendo também alterações não confirmadas:
Agora force o ramo "bagunçado" original a reverter: (sem mudar para ele)
Por exemplo:
ou se você fez 4 confirmações:
Aviso:
git branch -f master origin/master
vai redefinir as informações de rastreamento para esse ramo. Portanto, se você configurou suamaster
ramificação para enviar para outro lugar que não sejaorigin/master
, essa configuração será perdida.Aviso: Também há um perigo se você se recuperar novamente após a ramificação, descrita aqui . A única maneira de evitar isso é criar uma nova história usando a seleção de cereja. Esse link descreve o método mais seguro e à prova de falhas . Se você tiver alterações não confirmadas, convém
git stash
no início egit stash pop
no final.fonte
O cenário comum é o seguinte: esqueci de criar o novo ramo para o novo recurso e estava fazendo todo o trabalho no ramo de recursos antigo. Eu enviei todo o trabalho "antigo" para o ramo mestre e quero que meu novo ramo cresça do "mestre". Eu não fiz um único commit do meu novo trabalho. Aqui está a estrutura do ramo: "master" -> "Old_feature"
fonte
Se você o confirmar, também poderá escolher o ID de confirmação único. Faço isso frequentemente quando começo a trabalhar no master e, em seguida, quero criar uma ramificação local antes de avançar para a minha origem /.
Há muita coisa que você pode fazer com o cherry-pick, conforme descrito aqui , mas esse pode ser um caso de uso para você.
fonte
Isso pode ser útil para todos os que usam ferramentas para o GIT
Comando
Alternar ramificação - moverá suas alterações para nova ramificação. Então você pode confirmar as alterações.
TortoiseGIT
Clique com o botão direito do mouse em seu repositório e use TortoiseGit-> Switch / Checkout
SourceTree
Use o botão "Finalizar compra" para alternar entre ramificações. Você verá o botão "checkout" na parte superior depois de clicar em um ramo. As alterações da ramificação atual serão aplicadas automaticamente. Então você pode cometê-los.
fonte
Eu costumava @Robin resposta & listando tudo o que eu fiz,
! Se o repositório tiver mais de um stash, veja qual deles deve ser aplicado à nova ramificação:
e inspecionar o estoque individual,
Ou inspecione todos os stashes de uma só vez:
fonte
Na verdade, existe uma maneira muito fácil de fazer isso com o GitHub Desktop agora que eu não acredito que fosse um recurso antes.
Tudo o que você precisa fazer é mudar para a nova ramificação no GitHub Desktop e solicitará que você deixe as alterações na ramificação atual (que será ocultada) ou traga as alterações com você para a nova ramificação. Basta escolher a segunda opção, para trazer as alterações para o novo ramo. Você pode confirmar como de costume.
fonte