Fiz algumas alterações no meu ramo e percebi que esqueci que havia escondido outras alterações necessárias no referido ramo. O que eu quero é uma maneira de mesclar minhas alterações ocultas com as alterações atuais.
Existe uma maneira de fazer isso?
É mais por conveniência. Acabei desistindo e comprometendo primeiro minhas alterações atuais, depois minhas ocultas, mas eu preferia colocá-las de uma só vez.
Respostas:
Acabei de descobrir que, se suas alterações não confirmadas forem adicionadas ao índice (ou seja, "preparado", usando
git add ...
), entãogit stash apply
(e, presumivelmente,git stash pop
) fará realmente uma mesclagem adequada. Se não houver conflitos, você é de ouro. Caso contrário, resolva-os como de costume comgit mergetool
, ou manualmente, com um editor.Para deixar claro, é desse processo que estou falando:
... o que provavelmente é o que você está procurando.
tl; dr
Corra
git add
primeiro.fonte
git stash apply --force
ou algo assim.git add .
,git stash apply
e depoisgit reset
aplicar o stash para as minhas alterações de trabalho e fusão sem ter que fazer commits.Em execução
git stash pop
ougit stash apply
é essencialmente uma mesclagem. Você não precisaria confirmar suas alterações atuais, a menos que os arquivos alterados no stash também sejam alterados na cópia de trabalho; nesse caso, você teria visto esta mensagem de erro:Nesse caso, você não pode aplicar o estoque às suas alterações atuais em uma única etapa. Você pode confirmar as alterações, aplicar o stash, confirmar novamente e esmagar essas duas confirmações usando
git rebase
se você realmente não quiser duas confirmações, mas isso pode causar mais problemas do que vale a pena.fonte
git commit --amend
.Aqui está outra opção para fazer isso:
git stash show -p
mostrará o patch do último stash salvo.git apply
irá aplicá-lo. Após a fusão, o stash mesclado pode ser descartadogit stash drop
.fonte
git stash pop
que não faz isso apenas nos casos em que a mesclagem se aplicagit stash show -p --no-color | git apply --3way
(--3way
= volte à mesclagem de 3 vias se o patch falhar).git stash show -p
cria uma diferença entre o conteúdo oculto e a confirmação quando a entrada stash foi criada . Portanto, isso substituirá o arquivo de trabalho que o OP fez.git stash show -p
será mesclado porgit apply
, se possível sem conflitos.O jeito que eu faço isso é com
git add
isso primeiro entãogit stash apply <stash code>
. É a maneira mais simples.fonte
Conforme sugerido por @Brandan, aqui está o que eu precisava fazer para me locomover
Siga este processo:
E você ficará com alterações locais totalmente mescladas em
file
, pronto para realizar mais trabalhos / limpeza ou fazer uma única confirmação válida. Ou, se você souber que o conteúdo mescladofile
estará correto, escreva uma mensagem apropriada e pulegit reset HEAD^
.fonte
Pode ser que não seja a pior idéia de mesclar (via difftool) de ... sim ... um ramo!
fonte
você pode facilmente
fonte
Outra opção é fazer outro "git stash" das alterações locais não confirmadas e combinar os dois git stash. Infelizmente, o git parece não ter uma maneira de combinar facilmente dois esconderijos. Portanto, uma opção é criar dois arquivos .diff e aplicá-los - pelo menos não é um commit extra e não envolve um processo de dez etapas: |
Como: https://stackoverflow.com/a/9658688/32453
fonte