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

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


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.


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>

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.