Colocando alterações não confirmadas no Master em uma nova ramificação pelo Git

189

Como você pode fazer alterações não confirmadas em um teste de ramificação quando estou na ramificação master?

Léo Léopold Hertz 준영
fonte
2
Veja também: stackoverflow.com/questions/2944469/…
Jouni K. Seppänen

Respostas:

151

Você pode fazer o checkout no ramo de teste e confirmar. Você não perde suas alterações não confirmadas ao mudar para outro ramo.

Supondo que você esteja no ramo principal:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

Não tenho muita certeza dos arquivos excluídos, mas acho que eles não estão incluídos quando você usa git add .

Samuel Carrijo
fonte
12
Às vezes, o checkout falha porque suas alterações entram em conflito com esse ramo. Você pode tentar fazer o checkout -m para mesclar.
Jouni K. Seppänen
2
Eu tentei isso, mas recebi um erro: erro: suas alterações locais nos seguintes arquivos seriam substituídas pelo checkout. Confirme suas alterações ou as esconda antes de poder trocar de ramificação.
Ishwr
Embora isso funcione, a resposta que diz usar esconderijo deve ser a preferida, IMO. Talvez apenas escolha pessoal, mas é um fluxo de trabalho mais limpo, logicamente e apresenta o STASH, que é um comando útil.
Patrick
A opção "-b" está ausente, pois o título sugere que a pergunta se refere a um "novo" ramo.
Guntram
195

Além disso, você pode criar uma nova ramificação e mudar para ela fazendo:

git checkout -b new_branch
git add .

Eu uso isso o tempo todo, porque sempre esqueço de iniciar um novo ramo antes de começar a editar o código.

Swanand
fonte
3
mesmo problema que o @jouni anotou para a outra resposta - você pode ter dificuldade em mesclar a ramificação novamente no mestre se alterações adicionais entrarem em conflito com as alterações originais. IMO esta discussão responde à pergunta melhor: stackoverflow.com/questions/556923/...
jpw
Curto, doce e reconfortante ... "Eu uso isso o tempo todo ..."
ϹοδεMεδιϲ
1
Não se esqueça de confirmar no new_branch. Se você voltar ao ramo principal e reverter os arquivos alterados, também os perderá no new_branch.
petrsyn
36

Por que não usar apenas git stash. Eu acho que é mais intuitivo como copiar e colar.

$ git branch
  develop
* master
  feature1
  TEST
$

Você tem alguns arquivos em sua ramificação atual que deseja mover.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Mover para o outro ramo.

$ git checkout TEST

E aplicar

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

Também gosto git stashporque uso git flow, que reclama quando você deseja concluir uma ramificação de recursos enquanto ainda tem alterações no seu diretório de trabalho.

Assim como o @Mike Bethany, isso acontece comigo o tempo todo, porque trabalho em um novo problema, esquecendo que ainda estou em outro ramo. Assim, você pode esconder seu trabalho git flow feature finish..., e git stash applypara um novo git flow feature start ...ramo.

HeyWatchThis
fonte
2
git stashé a minha maneira preferida de lidar com alterações não confirmadas. É certamente um método intuitivo quando você pensa nele como recortar e colar.
Matthew Mitchell
Essa parece uma boa abordagem para mim. Funcionou sem problemas.
Yunus Nedim Mehel 01/05/19
Não sabia que você poderia fazer isso e funcionou bem. Parece um pouco mais intuitivo do que os outros métodos.
Glauco
Acho que esconder é a maneira mais profissional, em vez de usar o git checkout e depois adicioná-lo. Eu acho que sua resposta deve ter mais de 100 votos.
Matrosov Alexander
1
@ Καrτhικgit stash --include-untracked
2Toad
5
git checkout TEST
git add file1 file2
git commit
Bombe
fonte