Как я могу просмотреть git diff для любой фиксации с помощью vim-fugitive?

vim-fugitive side-by-side git diff отлично подходит для просмотра различий неустановленных файлов.

Как я могу использовать vim-fugitive для git diff

  • постановочные файлы?
  • любая версия git?

person Sathish    schedule 12.03.2013    source источник
comment
Вы читали :h fugitive?   -  person romainl    schedule 12.03.2013
comment
Вопрос был о том, как получить функциональность типа :Gstatus+D для любой ревизии. Отредактированный вопрос.   -  person Sathish    schedule 13.03.2013


Ответы (4)


Разница между текущим файлом и индексом

:Gdiff :0

Разница между текущим файлом и некоторыми другими [ревизиями]

:Gdiff [revision]

Разница между текущим файлом и текущим файлом 3 коммита назад:

:Gdiff ~3
person Peter Rincker    schedule 12.03.2013
comment
Для :Gdiff мне нужно знать файлы, которые были изменены в ревизии. :Gstatus перечисляет незафиксированные файлы, для которых я могу нажать D, чтобы просмотреть различия. Как я могу получить похожий список файлов и различия для любой версии. :Ревизия Gstatus не работает! - person Sathish; 13.03.2013
comment
Я чувствую, что это неправильный подход к проблеме. Вы можете использовать :Glog -- для заполнения окна quickfix предыдущими коммитами и просмотра коммитов. Я настоятельно рекомендую вам взглянуть на серию vimcast о беглецах: vimcasts. org/blog/2011/05/the-fugitive-series - person Peter Rincker; 13.03.2013
comment
Все они работают с одним файлом. Если вы можете переварить собственный вывод Git, взгляните на :Git!. Например, :Git! show [revision] загрузит исправление подсветки синтаксиса для всех файлов в [revision]. Это не так удобно, как настраиваемая модель взаимодействия :Gstatus, но может быть удобной ссылкой при разделении. - person Bluu; 07.11.2017
comment
После того, как вы подготовили свои изменения и напечатали сообщение фиксации внутри Gcommit, я считаю, что правильная команда, которую вы хотите, это :Gvdiff ~1, это создает вертикальное разделение, которое, как мне кажется, легче увидеть различия, а также более эффективно использовать пространство, поскольку верхняя панель все еще остается вашей. сообщение фиксации, и ваш diff представляет собой вертикальное разделение ниже этого - person icc97; 19.07.2018
comment
@icc97 вы также можете сделать :Gcommit --verbose или cvc из окна :Gstatus. - person Peter Rincker; 19.07.2018

Вы можете использовать :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>

Я рекомендую плагин unimpaired.vim Тима Поупа.

С этой конфигурацией мой рабочий процесс таков:

<Leader>gl для просмотра истории

]q и [q для перехода между версиями (unimpaired.vim)

<Leader>gd чтобы открыть diff

:q до конца diff

<Leader>ge чтобы вернуться к моей рабочей копии.

person AA.    schedule 07.03.2015
comment
также требует vim-dispatch - person gauteh; 27.03.2017

Добавление к приведенному выше ответу:

Если вы хотите получить разницу определенного файла из другой ветки

Gdiff branch_name:path/to/dir/filename.txt
person prathamesh    schedule 12.01.2015
comment
Вы также можете перейти Gdiff <branch> к буферу, если тот же файл также присутствует в ‹ветви›. - person Ain Tohvri; 04.02.2015

Я просто добавляю сюда способ просмотра различий, если используется :Glog -- или :Glog -- % (для текущего файла):

  1. :Glog --
  2. :cw чтобы открыть список коммитов
  3. Перейдите к коммиту, и отобразится информация о нем, а также затронутые файлы.
  4. Сосредоточиться на пути к файлу
  5. <c-w>gf и диф открывается в новой вкладке
  6. :tabclose чтобы просто закрыть вкладку и получить предыдущее состояние перед diff
person starikovs    schedule 13.07.2017
comment
Всем привет. Это сработало идеально. Но что здесь означает gf? Я не нашел его в fugitive документации. - person Eric Sun; 04.09.2019
comment
Привет! gf означает редактирование существующего файла под курсором в том же окне. - person starikovs; 04.09.2019