git-stash name - Como resolver git stash conflict without commit?




help see (9)

Não é a melhor maneira de fazer isso, mas funciona:

$ git stash apply
$ >> resolve your conflict <<
$ >> do what you want to do with your code <<
$ git checkout HEAD -- file/path/to/your/file

Como perguntado nesta pergunta , eu também quero saber como resolver um git stash pop conflitante sem adicionar todas as modificações em um commit (assim como "git stash pop" sem um conflito).

Minha abordagem atual é muito legal porque eu faço assim:

git stash pop -> CONFLICT
git stash drop
[resolve conflict]
[add conflict files]
git reset HEAD <all files that are in commit-mode>

[Update] Uma maneira de reproduzi-lo:

mkdir foo; cd foo; git init
echo "1" > one
echo "2" > two
git add -A; git commit -m "first"
echo "1.1" > one
echo "2.1" > two
git stash
echo "2.2" > two
git commit -a -m "second"
echo "Only this file would stay in HEAD without the conflict" > third
git add third
git stash pop
git status

2016-06-27: Adicionado um novo arquivo chamado 'third' ao exemplo para mostrar que soluções alternativas como a scy só funcionam para HEADs vazios, mas não corrigem o problema inicial de que o HEAD não tenha o mesmo conteúdo como para um git stash pop sem um conflito.


git add .
git reset

git add . encenará TODOS os arquivos dizendo ao git que você resolveu o conflito

git reset irá unstage todos os arquivos de teste sem criar um commit


Em vez de adicionar as alterações feitas para resolver o conflito, você pode usar o git reset HEAD file para resolver o conflito sem testar suas alterações.

Você pode ter que executar este comando duas vezes, no entanto. Uma vez para marcar o conflito como resolvido e uma vez para desassociar as mudanças que foram organizadas pela rotina de resolução de conflitos.

É possível que haja um modo de reset que faça as duas coisas simultaneamente, embora não haja um agora.


git checkout stash -- .

trabalhou para mim.

Observação : isso pode ser perigoso, pois não tenta mesclar as alterações do stash em sua cópia de trabalho, mas substitui -a pelos arquivos ocultos. Então você pode perder suas alterações não confirmadas.


Parece que esta pode ser a resposta que você está procurando, eu não tentei isso pessoalmente ainda, mas parece que pode fazer o truque. Com esse comando, o GIT tentará aplicar as alterações como estavam antes, sem tentar adicionar todas elas para confirmação.

git stash apply --index

Aqui está a explicação completa:

http://git-scm.com/book/en/Git-Tools-Stashing


De acordo com as perguntas do git stash , após corrigir o conflito, git add <file> é o curso correto de ação.

Foi depois de ler este comentário que entendi que as alterações são automaticamente adicionadas ao índice (por design). É por isso que o git add <file> conclui o processo de resolução de conflitos.


Suponha que você tenha este cenário onde você esconde suas alterações para poder puxar da origem. Possivelmente porque suas alterações locais são apenas debug: true em algum arquivo de configurações. Agora você puxa e alguém introduziu uma nova configuração lá, criando um conflito.

git status diz:

# On branch master
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      src/js/globals.tpl.js
no changes added to commit (use "git add" and/or "git commit -a")

OK. Eu decidi ir com o que o Git sugeriu: eu resolvi o conflito e cometi:

vim src/js/globals.tpl.js
# type type type …
git commit -a -m WIP   # (short for "work in progress")

Agora minha cópia de trabalho está no estado que quero, mas criei um commit que não quero ter. Como me livrar desse commit sem modificar minha cópia de trabalho? Espere, há um comando popular para isso!

git reset HEAD^

Minha cópia de trabalho não foi alterada, mas o WIP commit acabou. Isso é exatamente o que eu queria! (Note que eu não estou usando --soft aqui, porque se houver arquivos auto-mesclados em seu stash, eles são auto-preparados e, portanto, você acabaria com esses arquivos sendo testados novamente após a reset ).

Mas há mais uma coisa: A página man do git stash pop nos lembra que "Aplicar o estado pode falhar com conflitos; nesse caso, ele não é removido da lista de stash. Você precisa resolver os conflitos manualmente e chamar git stash drop manualmente depois ". Então é exatamente isso que fazemos agora:

git stash drop

E feito.


git stash branch will works, que cria um novo branch para você, verifica o commit em que você estava quando você escondeu seu trabalho, reaplica seu trabalho lá e então descarta o stash se ele for aplicado com sucesso. verifique this


Use o SourceTree (ferramenta gráfica para o Git) para ver seus commits e tree. Você pode redefini-lo manualmente clicando com o botão direito nele.





git git-stash