如何使用vim-fugitive查看任何提交的git diff?

Sat*_*ish 40 vim vimdiff git-diff vim-fugitive

vim-fugitive并排git diff非常适合查看未分段文件的差异.

我如何使用vim-fugitive来git diff

  • 分阶段的文件?
  • 任何git修订版?

Pet*_*ker 55

当前文件和索引之间的差异

:Gdiff :0
Run Code Online (Sandbox Code Playgroud)

当前文件和其他一些[版本]之间的差异

:Gdiff [revision]
Run Code Online (Sandbox Code Playgroud)

提交当前文件和当前文件3之间的差异:

:Gdiff ~3
Run Code Online (Sandbox Code Playgroud)

  • 对于:Gdiff我需要知道修订版中更改的文件.:Gstatus列出了未提交的文件,我可以按下D来查看差异.如何在任何修订版上获得类似的文件列表和差异.:Gstatus修订不起作用! (3认同)
  • 我觉得这是解决问题的错误方法。你可以使用 `:Glog --` 用以前的提交填充 `quickfix` 窗口并浏览提交。我强烈建议你看一下关于逃犯的 vimcast 系列:http://vimcasts.org/blog/2011/05/the-fugitive-series/ (2认同)

AA.*_*AA. 28

您可以使用它:Glog来获取此文件的历史记录更改.您可以使用:cnext:cprevious在更改之间移动.当您点击要比较的版本时,您可以使用:Gdiff您可以退出vimdiff关闭缓冲区:q并退出历史记录日志:Gedit

这是我的.vimrc键盘配置

  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>
Run Code Online (Sandbox Code Playgroud)

我建议使用Tim Pope unimpaired.vim插件.

使用该配置,我的工作流程是:

<Leader>gl 查看历史

]q[q在版本之间移动(unmpaired.vim)

<Leader>gd 打开 diff

:q 结束 diff

<Leader>ge 返回我的工作副本.


pra*_*atz 9

加上以上答案:

如果你想获得另一个分支的特定文件的差异

Gdiff branch_name:path/to/dir/filename.txt
Run Code Online (Sandbox Code Playgroud)

  • 如果<branch>中也存在相同的文件,您也可以在缓冲区中使用`Gdiff <branch>`. (3认同)