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


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 .


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.