2013-03-12 8 views
29

vim-fugitive side-by-side git diff è ottimo per la visualizzazione del diff di file nonstage.Come posso visualizzare git diff per qualsiasi commit usando vim-fugitive?

Come posso usare vim-latitante a git diff

  • in scena i file?
  • qualsiasi revisione git?
+2

Hai letto ': h fugitive'? – romainl

+0

La domanda era su come ottenere: Gstatus + D come funzionalità per qualsiasi revisione. Domanda a cura – Sathish

+0

La tua domanda è completamente diversa ora che hai modificato. Per rispetto dello sforzo di Peter Rincker, dovresti annullare le modifiche, spuntare la sua risposta e fare un'altra domanda. – romainl

risposta

41

Diff tra il file corrente e l'indice

:Gdiff :0 

Diff tra il file corrente e qualche altro [revisione]

:Gdiff [revision] 

Diff tra il file corrente e file corrente 3 impegna fa:

:Gdiff ~3 
+3

Per: Gdiff ho bisogno di conoscere i file che sono stati modificati in una revisione. : Gstatus elenca i file non salvati su cui posso premere D per visualizzare il diff. Come posso ottenere lista di file e diff simili su qualsiasi revisione. : La revisione di Gstatus non funziona! – Sathish

+0

Mi sembra che questo sia il modo sbagliato di affrontare il problema. Puoi usare ': Glog --' per popolare la finestra' quickfix' con i commit precedenti ed esplorare i commit. Ti suggerisco caldamente di dare un'occhiata alla serie di vimcast su fuggitivo: http://vimcasts.org/blog/2011/05/the-fugitive-series/ –

+0

Questi funzionano tutti su un singolo file. Se riesci a sopportare l'output nativo di Git, dai un'occhiata a ': Git!'. Ad esempio, ': Git! show [revision] 'caricherà una patch syntax-highlight di tutti i file in' [revision] '. Non è bello come il modello di interazione personalizzato di ': Gstatus', ma può essere un utile riferimento in una divisione. – Bluu

6

In aggiunta alla risposta di cui sopra:

Se si desidera ottenere un diff, di un particolare file da un altro ramo

Gdiff branch_name:path/to/dir/filename.txt 
+1

È anche possibile utilizzare 'Gdiff ' su un buffer se lo stesso file è presente anche nello . –

18

È possibile utilizzare :Glog per ottenere i cambiamenti di storia per questo file. È possibile utilizzare :cnext o :cprevious per spostarsi tra le modifiche. Quando si colpisce la versione che si desidera confrontare, allora si può utilizzare :Gdiff il possibile per uscire dalla vimdiff chiudere il buffer di :q e di uscire da Cronologia eventi con :Gedit

Questo è il mio Vimrc tastiera config

nnoremap <leader>gs :Gstatus<CR> 
    nnoremap <leader>gc :Gcommit -v -q<CR> 
    nnoremap <leader>ga :Gcommit --amend<CR> 
    nnoremap <leader>gt :Gcommit -v -q %<CR> 
    nnoremap <leader>gd :Gdiff<CR> 
    nnoremap <leader>ge :Gedit<CR> 
    nnoremap <leader>gr :Gread<CR> 
    nnoremap <leader>gw :Gwrite<CR><CR> 
    nnoremap <leader>gl :silent! Glog<CR> 
    nnoremap <leader>gp :Ggrep<Space> 
    nnoremap <leader>gm :Gmove<Space> 
    nnoremap <leader>gb :Git branch<Space> 
    nnoremap <leader>go :Git checkout<Space> 
    nnoremap <leader>gps :Dispatch! git push<CR> 
    nnoremap <leader>gpl :Dispatch! git pull<CR> 

Mi raccomando di usare il plugin Tim Pope unimpaired.vim.

Con questa configurazione, il mio flusso di lavoro è:

<leader>gl Per visualizzare la cronologia

]q e [q per spostarsi tra le versioni (unimpaired.vim)

<leader>gd per aprire diff

:q a fine diff

<leader>ge per tornare alla mia copia di lavoro.

+0

richiede anche vim-dispatch – gauteh

0

ho appena cadere qui il modo in cui ho vista un diff Se viene utilizzato il :Glog -- o :Glog -- % (per file corrente):

  1. :Glog --
  2. :cw per aprire un elenco di commit
  3. Accedere a una commit e le relative informazioni vengono visualizzate anche i file interessati
  4. Concentrarsi su un percorso file
  5. <c-w>gf e il diff è aperto i n nuova scheda
  6. :tabclose per chiudere solo la scheda e ottenere lo stato precedente prima che il diff