How can I view git diff for any commit using vim-fugitive?

Solution 1:

Diff between current file and the index

:Gdiff :0

Diff between current file and some other [revision]

:Gdiff [revision]

Diff between current file and current file 3 commits ago:

:Gdiff ~3

Solution 2:

You can use :Glog to get the history changes for current file. You can use :cnext or :cprevious to move between changes. When you hit the version that you want to compare then you can use :Gdiff. You can exit from vimdiff closing the buffer :q and exit from history log with :Gedit.

This is my .vimrc keyboard 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>

I recommend unimpaired.vim plugin by Tim Pope.

With that configuration, my workflow is:

<Leader>gl to view history

]q and [q to move between versions (unimpaired.vim)

<Leader>gd to open diff

:q to end diff

<Leader>ge to return to my working copy.

Solution 3:

Adding to above answer:

If you want to get a diff, of a particular file from another branch

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