git stash e git pull

87

Eu sou novo no Git e estou usando o plugin EGit Eclipse para fazer commit.

Eu modifiquei alguns arquivos e escondi as alterações, então fiz git pullna linha de comando que puxou todos os commits mais recentes. Então eu fiz Apply stashed changesde EGit. Agora ele aplicou minhas alterações e as alterações retiradas do último commit de arquivos armazenados foram retiradas. Eu não tenho certeza porque ele não me perguntou sobre conflitos de mesclagem e sobrescreveu minhas mudanças e perdi mudanças de commits anteriores.

Como obter essas mudanças?

Lolly
fonte
Não parece plausível. O stash apply traz mudanças não conflitantes ou causa conflitos de fusão. Acho que você se esqueceu de mencionar algo. Além disso, você pode repetir seus passos, provavelmente seu estoque ainda está na lista, use git stash listpara mostrá-lo.
kan

Respostas:

207

Quando você tiver alterações em sua cópia de trabalho, na linha de comando, faça:

git stash 

Isso irá esconder suas alterações e limpar seu relatório de status

git pull

Isso irá puxar as alterações do branch upstream. Certifique-se de que diz avanço rápido no relatório. Se não, provavelmente você está fazendo uma mesclagem não intencional

git stash pop

Isto irá aplicar as mudanças ocultas de volta à cópia de trabalho e remover as mudanças do estoque, a menos que você tenha conflitos. Em caso de conflito, eles permanecerão em estoque para que você possa recomeçar, se necessário.

se você precisa ver o que está em seu estoque

git stash list
yilmazhuseyin
fonte
@java_newbie, Se você quiser fazer isso com stash e puxar não, não tem como. Mas você pode obter o mesmo resultado com rebase. O comando 'git rebase origin / <upstream branch name>' deve fazer a mesma coisa.
yilmazhuseyin
5
Acho que isso git stash && git pull && git stash pop
bastará
@yilmazhuseyin O que você quer dizer com 'mesmo resultado'. Você pode contar uma anedota, se puder? Você quis dizer git rebase origin/masterque produzirá o mesmo resultado que git stash; git pull; git stash pop?
nehem
8
Se estiver usando Git v2.9.0 ou versão posterior, tente git pull --rebase --autostash. Para sua informação
momocow
1
Será --autostashsempre funciona? Por exemplo, se eu tiver arquivos não rastreados que já estão parcialmente no Git?
qräbnö