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

VimGit DiffVimdiffVim Fugitive

Vim Problem Overview


vim-fugitive side-by-side git diff is great for viewing diff of unstaged files.

How can I use vim-fugitive to git diff

  • staged files?
  • any git revision?

Vim Solutions


Solution 1 - Vim

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 - Vim

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 - Vim

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

Solution 4 - Vim

I just drop here the way I view a diff if the :Glog -- or :Glog -- % (for current file) is used:

  1. :Glog --
  2. :cw to open a list of commits
  3. Navigate to a commit and its info as well affected files are shown
  4. Focus on a file path
  5. <c-w>gf and the diff is opened in new tab
  6. :tabclose to just close the tab and get the previous state before the diff

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSathishView Question on Stackoverflow
Solution 1 - VimPeter RinckerView Answer on Stackoverflow
Solution 2 - VimAA.View Answer on Stackoverflow
Solution 3 - VimprathameshView Answer on Stackoverflow
Solution 4 - VimstarikovsView Answer on Stackoverflow