No Magit, qual é a diferença entre um 'esconderijo' e um 'instantâneo'?

17

O manual do usuário do Magit inclui dois conjuntos de comandos "stashing": comandos em minúsculas salvam um stash e comandos em maiúsculas salvam um instantâneo . Depois de consultar o Google, o Stack Overflow e a git-stash(1)página de manual, ainda não sei qual é a diferença.

Qual é a diferença?

Norman Ramsey
fonte
1
Meu entendimento é que stashtambém redefinirá (desfará) as alterações e snapshotdeixará as alterações na área de trabalho (pode ser útil se você deseja reorganizar as confirmações antes de pressionar).
Wvxvw 23/05

Respostas:

24

As variantes "stash" e "snapshot" criam os mesmos objetos stash. A diferença é que, quando você cria um instantâneo, as alterações ocultas não são removidas dos arquivos na árvore de trabalho e / ou no índice. (Assim como quando você tira uma foto de seus amigos se divertindo - isso também não os faz desaparecer ;-)

Isso é planejado como um tipo de mecanismo de backup. Digamos que você esteja executando uma refatoração complicada e que acabou de testar e o código modificado ainda parece funcionar, mas ainda não foi concluído. Agora seria um bom momento para criar um instantâneo, para que você tenha algo a que voltar, se você estragar mais tarde.

É claro que você pode criar um commit "wip" temporário, diretamente no ramo em que está trabalhando, para realizar o mesmo. Geralmente é o que eu faço.

E você também pode automatizar o processo de gravação de trabalhos em andamento, ativando os modos Wip . Eu tenho esses modos ativados como uma rede de segurança, mas ainda crio confirmações wip diretamente na ramificação atual ou crio um instantâneo. É mais fácil trabalhar com eles do que os wip refs.

Observe que o Magit vem com sua própria implementação de stash, escrita em Elisp. Isso foi necessário para implementar as variantes de captura instantânea e as variantes de stash somente de árvore de trabalho e apenas de índice. O Git não fornece nenhuma dessas variantes.

tarso
fonte