Mover o trabalho existente e não confirmado para uma nova ramificação no Git

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 faço para mover as alterações não confirmadas existentes para uma nova ramificação e redefinir a minha atual?

Desejo redefinir minha ramificação atual preservando o trabalho existente no novo recurso.

Use o seguinte:

git checkout -b  

Isso deixará sua ramificação atual como está, criará e fará o checkout de uma nova ramificação e manterá todas as suas alterações. Você pode então fazer um commit com:

 git add  

e se comprometa com sua nova filial com:

 git commit -m "" 

As alterações no diretório de trabalho e as alterações organizadas no índice não pertencem a nenhuma ramificação ainda. Isso muda onde essas alterações terminariam.

Você não redefine seu ramo original, ele permanece como está. O último commit no ainda será o mesmo. Portanto, você faz o checkout -b e, em seguida, confirma.

Alternativamente:

  1. Salvar as alterações atuais em um stash temporário:

    $ git stash

  2. Crie uma nova ramificação com base nesse stash e mude para a nova ramificação:

    $ git stash branch stash@{0}

Dica: use a tecla tab para reduzir a digitação do nome do stash.

Se você estiver cometendo commits em sua ramificação principal enquanto está codificado, mas agora quer mover os commits para uma ramificação diferente:

  1. Copie seu histórico atual em um novo branch, trazendo também mudanças não confirmadas:

     git checkout -b  
  2. Agora force a ramificação “bagunçada” original a retroceder: (sem alternar para ela)

     git branch -f   

    Por exemplo:

     git branch -f master origin/master 

    ou se você tivesse feito 4 commits:

     git branch -f master HEAD~4 

Aviso: Parece que git branch -f master origin/master redefinirá as informações de rastreamento para essa ramificação. Portanto, se você configurou sua ramificação master para enviar para outro lugar que não origin/master , essa configuração será perdida.

Uma alternativa é usar essa técnica de redefinição . Mas essas instruções descartarão todas as alterações não confirmadas que você tenha. Se você quiser mantê-los, guarde-os primeiro e solte-os no final.

Se você o confirmar, você também pode selecionar o único ID de confirmação. Eu faço isso frequentemente quando eu começo a trabalhar no mestre e, em seguida, quero criar um ramo local antes de empurrar para a minha origem /.

 git cherry-pick  

Há muito o que você pode fazer com o cherry-pick, como descrito aqui , mas isso pode ser um caso de uso para você.

O cenário comum é o seguinte: Esqueci de criar a nova ramificação para o novo recurso e estava fazendo todo o trabalho na ramificação do recurso antigo. Eu cometi todo o trabalho “antigo” para o ramo principal, e quero que meu novo ramo cresça a partir do “mestre”. Eu não fiz um único commit do meu novo trabalho. Aqui está a estrutura de ramificação: “master” -> “Old_feature”

 git stash git checkout master git checkout -b "New_branch" git stash apply