Come posso scartare la modifica del file dalla finestra di stato dei fuggitivi?


33

Quando ci si trova nella finestra di stato del plug-in fuggitivo , è possibile accedervi usando le modifiche diff per un file usando e alternare i file per il commit usando .:GstatusD-

Esiste una scorciatoia simile per scartare le modifiche, con lo scarto intendo l'equivalente di git checkout -- filename?

Aggiornare:

Trovato una richiesta di funzionalità nella pagina github dei fuggitivi Numero n. 97: Collegamento per il checkout / rimozione dei file

Secondo questo il modo preferito sta usando :Gread :w

Aggiornamento 2:

Da giugno 2014 è possibile utilizzare Ucome indicato di seguito da Anson .

Aggiornamento 3: dal 3 gennaio 2019 viene associata la mappatura dei tastiX

Risposte:


27

Questa funzionalità è stata aggiunta a giugno 2014 ed è mappata per impostazione predefinita U.

Questa informazione si trova nel file della guida sotto :h :Gstatus:

     U     |:Git| checkout HEAD

Richiesta di funzionalità e discussione:
https://github.com/tpope/vim-fugitive/issues/97

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


Se ciò non è documentato, potrebbe essere interpretato come non sicuro. Non sarebbe difficile scoprire che hai occultato le modifiche locali a causa di una sequenza di tasti magica non documentata?
visto il

2
Aggiornamento 2019 ora ÈX
Oguz Bilgic

chiunque abbia il privilegio di modifica, lo modifichi gentilmente su X?
Chriz

15

È possibile utilizzare il comando di fuggitivoGread per sostituire il contenuto di un buffer con varie versioni alternative del file del buffer (cioè ciò deve essere fatto dal buffer di un file, non dal :Gstatusbuffer).

  • :Gread(senza argomenti) utilizzerà la versione del file dall'indice .
  • :Gread - utilizzerà la versione del file dal commit HEAD.

Consulta la documentazione all'indirizzo :help fugitive-revisionper l'elenco delle altre specifiche di revisione supportate dal fuggitivo (le due sopra sono probabilmente le più immediatamente utili).

Il :Greadflusso di lavoro procede in questo modo:

  1. :Gread
  2. fuggitivo cancella il buffer corrente e legge i contenuti dall'indice
  3. Risultato : il buffer ora ha gli stessi contenuti dell'indice. Il file dell'albero di lavoro non è cambiato.
  4. Puoi continuare con :wper salvare il file nell'albero di lavoro (o usare :Gread|wse sai che vorrai salvarlo subito).

Il :Git checkout -- %flusso di lavoro procede in questo modo:

  1. :Git checkout -- %
  2. Git copia la versione del file nell'indice nel file nell'albero di lavoro.
  3. Vim nota che il file è stato modificato al di fuori dell'editor e richiede di ignorarlo o ricaricarlo.
  4. Dì a Vim di ricaricare il file.
  5. Risultato : sia il file dell'albero di lavoro che il buffer ora hanno il contenuto dell'indice.

Riepilogo: :Greadevita il prompt "il file è cambiato da quando è iniziata la modifica" e consente di decidere quando si desidera modificare il file nell'albero di lavoro.


Quando il buffer rappresenta uno stadio dell'indice del file invece del file dall'albero di lavoro, :Greadlegge dal contenuto del file come esiste sul disco nell'albero di lavoro invece dello stadio 0 dell'indice.


Mappatura per gstatus per ripristinare il file:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor

1

Mappatura per gstatus per ripristinare il file:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>

questo funziona alla grande, l'unico aspetto negativo è che avrò la finestra di dialogo che il file è cambiato sul disco e se voglio ricaricarlo. Sarebbe bello se fosse silenzioso.
martedì

1
È ancora meglio IMO quando si ottiene la conferma che il file è effettivamente ripristinato. Ma il ricaricamento automatico silenzioso può essere eseguito con l'opzione 'autoread' ( :help autoread). Altro che potresti bufdo esopra au.
majkinetor,

0

Bene, ci hai provato :help fugitive?

Apparentemente no, non c'è scorciatoia per questa funzione Git.


Si l'ho fatto. Ci sono state volte in cui non ho trovato una funzione nella guida che sono state presenti mai meno. La tua opinione è che non dovresti mai chiedere una funzione che non è nella guida per il programma / plugin?
martedì

Sì, è successo anche a me: c'era una funzione che ero in grado di eseguire :callma non avevo un comando associato. Non ricordo il nome del plugin ... Allinea? comunque, la mia opinione è che si dovrebbe leggere i documenti prima di chiedere in giro. Che hai fatto Quindi va bene. Ma il secondo passo logico, dopo aver letto i documenti, sarebbe l'IMO per guardare l'origine del plugin e vedere se c'è qualche funzione utile lì. Che dovresti fare. Ma, AFAIK, il fuggitivo non si occupa git checkoutaffatto, quindi le tue possibilità sono scarse. Probabilmente dovrai tornare a :!git checkout -- filename.
romainl

Ok, grazie per il chiarimento. Penso che tu valga un punto valido riguardo a dare un'occhiata al codice sorgente ma allo stesso tempo se le informazioni sono disponibili solo nel codice sorgente potrebbe essere un QA valido qui. Accetterà la tua risposta e continuerà a utilizzare :Git checkout -- %.
martedì

0

Sebbene non abbia nulla a che fare con Vim, ho pensato di dirti che a volte lo faccio:

$ 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

finendo il lavoro rapidamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.