Como descartar alterações de arquivos da janela de status de fugitivos?

33

Quando na janela de status do plugin fugitivo , acessada usando , é possível diferenciar as alterações de um arquivo usando e alternar os arquivos para confirmar o uso .:GstatusD-

Existe algum atalho semelhante para descartar alterações, com o descarte que quero dizer equivalente git checkout -- filename?

Atualizar:

Foi encontrada uma solicitação de recurso na página do fugitivo do github Problema nº 97: atalho para fazer checkout / remover arquivos

De acordo com isso, a maneira preferida é usar :Gread :w

Atualização 2:

Desde junho de 2014, é possível usar Ucomo respondido por Anson abaixo .

Atualização 3: desde 3 de janeiro de 2019, a combinação de teclas é mapeada paraX

tidbeck
fonte

Respostas:

27

Essa funcionalidade foi adicionada em junho de 2014 e, por padrão, é mapeada para U.

Esta informação está localizada no arquivo de ajuda em :h :Gstatus:

     U     |:Git| checkout HEAD

Solicitação e discussão de recursos:
https://github.com/tpope/vim-fugitive/issues/97

Confirme:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63

Anson
fonte
Se isso não for documentado, pode ser considerado inseguro. Não seria difícil descobrir que você alterou suas alterações locais por causa de um pressionamento de tecla mágico não documentado?
sehe
2
2019 Update now It isX
Oguz Bilgic
alguém com privilégio de edição, por favor edite-o para o X?
chriz 8/09
15

Você pode usar o comando fugitivoGread para substituir o conteúdo de um buffer por várias versões alternativas do arquivo do buffer (ou seja, isso deve ser feito a partir do buffer de um arquivo, não do :Gstatusbuffer).

  • :Gread(sem argumento) usará a versão do arquivo do índice .
  • :Gread - usará a versão do arquivo do commit HEAD.

Consulte a documentação em :help fugitive-revisionpara obter a lista de outras especificações de revisão suportadas pelo fugitivo (as duas acima são provavelmente as mais úteis imediatamente).

O :Greadfluxo de trabalho continua assim:

  1. :Gread
  2. fugitivo limpa o buffer atual e lê o conteúdo do índice
  3. Resultado : o buffer agora tem o mesmo conteúdo que o índice. O arquivo da árvore de trabalho não é alterado.
  4. Você pode acompanhar o processo :wpara salvar o arquivo na árvore de trabalho (ou usá- :Gread|wlo se souber que deseja salvá-lo imediatamente).

O :Git checkout -- %fluxo de trabalho continua assim:

  1. :Git checkout -- %
  2. Git copia a versão do arquivo no índice para o arquivo na árvore de trabalho.
  3. O Vim percebe que o arquivo foi alterado fora do editor e solicita que você o ignore ou recarregue.
  4. Você diz ao Vim para recarregar o arquivo.
  5. Resultado : o arquivo da árvore de trabalho e o buffer agora têm o conteúdo do índice.

Resumo: :Greadevita o prompt “o arquivo foi alterado desde o início da edição” e permite que você decida quando deseja modificar o arquivo na árvore de trabalho.


Quando o buffer representa um estágio de índice do arquivo em vez do arquivo da árvore de trabalho, :Greadlê o conteúdo do arquivo como ele existe no disco da árvore de trabalho, em vez do estágio 0 do índice.

Chris Johnsen
fonte
Mapeamento para gstatus para reverter arquivo:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor 31/03
1

Mapeamento para o gstatus reverter o arquivo:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
fonte
isso funciona muito bem, a única desvantagem é que vou receber a caixa de diálogo que o arquivo foi alterado no disco e se eu quiser recarregá-lo. Seria bom se estivesse em silêncio.
Tidbeck #
1
Isso é IMO ainda melhor quando você obtém a confirmação de que o arquivo é realmente revertido. Mas o recarregamento silencioso automático pode ser feito com a opção 'autoread' ( :help autoread). Outro que você poderia bufdo edentro acima au.
majkinetor
0

Bem, você tentou :help fugitive?

Aparentemente não, não há atalho para esse recurso Git.

romainl
fonte
Sim eu fiz. Houve momentos em que não encontrei um recurso na ajuda que estivesse presente, no entanto. É sua opinião que você nunca deve perguntar sobre um recurso que não está na ajuda do programa / plugin?
Tidbeck
Sim, aconteceu comigo também: havia uma função que eu era capaz, :callmas não tinha um comando associado. Não lembro o nome do plugin ... Alinhar? seja como for, minha opinião é que se deve ler os documentos antes de perguntar. O que você fez. Então isso é legal. Mas o segundo passo lógico, depois de ler os documentos, seria IMO para olhar a fonte do plug-in e verificar se há alguma função útil lá. O que você deve fazer. Mas, AFAIK, fugitivo não lida com git checkoutisso, então suas chances são pequenas. Você provavelmente precisará voltar para :!git checkout -- filename.
Romainl
Ok, obrigado pelo esclarecimento. Eu acho que você faz uma observação válida a respeito de dar uma olhada no código-fonte, mas ao mesmo tempo, se as informações estiverem disponíveis apenas no código-fonte, poderia ser um controle de qualidade válido aqui. Aceitará sua resposta e continuará usando :Git checkout -- %.
Tidbeck
0

Embora não tenha nada a ver com o vim, pensei em dizer que às vezes eu faço:

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

terminando o trabalho rapidamente.

Valer
fonte