Pegue todas as minhas mudanças no branch atual e mova-as para um novo branch no Git

105

Comecei a trabalhar no que pensei que seria uma pequena correção de bug no meu branch master. No entanto, saiu do controle a ponto de eu desejar ter criado um branch separado para fazer o desenvolvimento em primeiro lugar.

Então, agora o que eu gostaria de fazer é:

  1. Crie um novo branch chamado (digamos) "edge"
  2. Mova todos os arquivos alterados / não rastreados no master para a borda (de forma que o master não seja alterado desde quando comecei a correção do bug)
  3. Terminar meu trabalho no limite, voltar ao master

Como posso fazer isso?

Tom Lehman
fonte

Respostas:

103

Se você ainda não se comprometeu nada, já está na posição certa.

  1. Crie uma nova filial: git checkout -b edge
  2. Seus arquivos não mudaram. Somentegit add que precisa e comprometa como de costume.
  3. Quando terminar de se comprometer edge, volte para mastercom git checkoute git merge edge.
JB.
fonte
Não tinha cometido nada ainda, então aquela primeira linha foi uma visão bem-vinda ... ufa, isso foi na verdade bastante indolor :-)
Drenai
87

Para adicionar à resposta de JB, se você começou a fazer alguns commits no master para o que acabou sendo um esforço "extremo", você poderia:

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply
VonC
fonte
o stash wrapper não é estritamente necessário, mas apenas para alterações de trabalho não confirmadas, certo?
HaveAGuess
4
@HaveAGuess right. Ao "pegar todas as minhas alterações", também incluí as alterações atuais ainda não adicionadas. Daí o esconderijo.
VonC
A segunda e a terceira linhas não poderiam ser recolhidas em "git checkout -b edge master"?
Paul Lynch
@PaulLynch considerando que os commits (on master) que deveriam estar ativos edge estão on master, sim. Eu editei a resposta.
VonC de
Não vejo como isso git stashé útil aqui, já que o uso git checkout -bnão modifica a árvore de trabalho de forma alguma ...
user1686
13

Se você está tentando mover o trabalho do master para um branch que já existe, mas está atrás do master, o git não permitirá que você alterne para o outro branch. Nesse caso, faça o seguinte:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
Jesse P
fonte