As respostas dadas até o momento não são ideais, pois exigem muito trabalho desnecessário para resolver conflitos de mesclagem ou fazem muitas suposições que freqüentemente são falsas. É assim que se faz perfeitamente. O link é para o meu próprio site.
Você possui alterações não confirmadas nas my_branch
quais deseja se comprometer master
, sem confirmar todas as alterações my_branch
.
Exemplo
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
Explicação
Comece mesclando-se master
à sua filial, pois você precisará fazer isso de qualquer maneira e agora é o melhor momento para resolver qualquer conflito.
A -u
opção (aka --include-untracked
) em git stash -u
impede de perder arquivos untracked quando você fazer mais tarde git clean -f -d
dentro master
.
Depois git checkout master
, é importante que você NÃO o faça git stash pop
, porque precisará desse estoque mais tarde. Se você colocar o esconderijo criado em my_branch
e depois fazer git stash
em master
, você vai causar conflitos de mesclagem desnecessárias quando posteriormente se aplicam que esconderijo no my_branch
.
git reset
desfaz tudo o que resulta git stash apply
. Por exemplo, os arquivos que foram modificados no stash, mas não existem, master
são testados como conflitos "excluídos por nós".
git checkout .
e git clean -f -d
descarte tudo o que não foi confirmado: todas as alterações nos arquivos rastreados e todos os arquivos e diretórios não rastreados. Eles já estão salvos no stash e, se deixados master
, causariam conflitos desnecessários de mesclagem ao voltar para my_branch
.
O último git stash pop
será baseado no original my_branch
e, portanto, não causará conflitos de mesclagem. No entanto, se o seu stash contiver arquivos não rastreados que você se comprometeu a dominar, o git reclamará que "Não foi possível restaurar arquivos não rastreados do stash". Para resolver este conflito, excluir esses arquivos de sua árvore de trabalho, em seguida git stash pop
, git add .
, e git reset
.