Acabei de atualizar para o magit 2.1.0. (E também para emacs 25.0.50 e git 2.3.1.)
Anteriormente, no *magit*
buffer eu podia:
- Selecione um pedaço na área Sem estágio.
- Digite ve responda yes para inverter.
Isso foi útil.
Mas agora, em magit 2.1.0 ele dá um erro: "Cannot reverse unstaged changes"
.
Por quê?
Tomando uma dica da mensagem de erro, descobri que ainda posso fazer isso, embora de maneira um pouco "retrógrada" com mais etapas:
- sprenda o pedaço. (Sente-se para trás; aproximando-o do estado comprometido.)
- Navegue para baixo e selecione-o na área Preparado.
- Pressione v, responda sim.
- No entanto, o pedaço ainda está encenado, então finalmente eu tenho que uencenar o pedaço.
Isso é um bug ou é intencional e / ou estou sendo denso? Neste último caso, você pode me ajudar a entender?
ATUALIZAÇÃO: Após o RTFinfo completamente, vejo que existem dois comandos:
- v
magit-reverse
Inverta a alteração no ponto da árvore de trabalho. - k
magit-discard
Remova a alteração no ponto da árvore de trabalho.
Parece que k magit-discard
faz o que eu estava acostumado a vfazer antes. Ele funciona em um pedaço não-encenado.
Então, praticamente, eu só preciso treinar minha memória muscular para usar k. Eu poderia postar isso como uma resposta automática. Mas acho que ainda estou curioso sobre a lógica, porque imagino que entendê-la me ajudará a entender melhor o magit.
k
também descarta uma alteração não confirmada nas versões anteriores do magit e parece o comando apropriado para o que você está fazendo.v
é para git revert: criando um novo commit que faz a mudança oposta de um anterior. Eu acho que reverter uma mudança que realmente não foi confirmada é o mesmo que descartá-la, mas 'reverter' tem um significado específico como um comando git.v
estava vinculado amagit-revert-item
(a terminologia "reversa" vem daí, @PythonNut) e, para itens não estágios, isso costumava fazer ummagit-discard-item
(como também vinculado ak
) - veja a linha 4872 aqui . Aparentemente, eu aprendi acidentalmente esse significado especialv
, que funcionou, quando eu deveria ter aprendido a usark
.Respostas:
O Magit implementa cinco "variantes de aplicação" descritas no manual : estágio, instável, "aplicação regular", descarte e reversão. Os três primeiros devem ser bastante óbvios para a maioria dos usuários do Git. Os dois últimos não existem na porcelana Git (no Magit, eles são implementados usando os comandos de encanamento Git e Emacs Lisp).
Essas duas variantes são descritas assim:
Essas duas variantes fazem coisas muito diferentes; portanto, nenhuma dessas variantes deve voltar para a outra variante nos casos em que ela mesma não pode ser usada. Manter o comportamento antigo (de recuar do reverso para o descarte em alguns contextos) pode ter sido mais conveniente a curto prazo, mas a longo prazo evita que os usuários realmente tentem entender para que servem essas duas variantes.
Descartar é muito mais perigoso que reverter . O primeiro "joga fora as alterações não confirmadas" (essas mudanças são perdidas, não estão mais em lugar nenhum), enquanto o último "cria mudanças", fazendo uma alteração mais antiga e fazendo o oposto na área de trabalho (a mudança antiga não é perdida, ainda está em uma confirmação ou no índice).
Voltar de "criar" para "excluir" é muito perigoso, portanto o Magit não faz mais isso.
Observe também que, usando os novos modos de limpeza, você pode se proteger contra a perda de alterações devido a um descarte acidental.
fonte
Parece que eu aprendi acidentalmente que v, vinculado a
magit-revert-item
, costumava fazer ummagit-discard-item
neste caso especial de pedaços não-encenados. Veja o<=== HERE ===
comentário que coloquei abaixo:Fonte: código 1.4.2 .
Mas agora isso não acontece:
Fonte: master :
No entanto, ké vinculado diretamente a
magit-discard-item
. Eu deveria ter aprendido a usar isso em primeiro lugar. Isso funcionou antes da versão 2.1.0 e ainda funciona.Em conclusão, o magit 2.1.0 foi redesenhado significativamente. É inevitável que alguns casos estranhos nos cantos não tenham sobrevivido. E, eu concordo, não precisa ter sobrevivido. Vou reaprender a chave.
fonte