Diff текущей и предыдущей версии с использованием vim-fugitive
Я знаю, что :Glog
заполнит список быстрого устранения всеми версиями файла в текущем буфере и что я могу нажать <enter>
на них, чтобы увидеть файл в этой конкретной версии, но есть простой способ чтобы увидеть разницу конкретной версии с предыдущей версией (чтобы легко увидеть, что изменилось)?
EDIT: то, что мне нужно, видит каждое из этих изменений в вертикальной разнице в vim: git log -p -- path/to/file.txt
.
Ответы
Ответ 1
Не удалось убедить себя сделать то, что я хочу (он либо не делает этого, либо я не знаю, как его использовать), но я нашел плагин, который дает желаемое поведение: https://github.com/kablamo/vim-git-log.
(он не показывает разницу в списке быстрого удаления, а в полноразмерном буфере, который в порядке)
Ответ 2
Это то, что я использую:
:Gdiff [revision]
См. :help Gdiff
для других параметров (вертикальные и горизонтальные разбиения и т.д.).
Например:
:Gdiff HEAD
или если у вас есть номер версии (например: aaffdfdstsdgssetds):
:Gdiff aaffdfds
Ответ 3
Я считаю, что это так просто:
:vert diffsplit #
Ответ 4
При использовании :Glog
вы можете просто нажать <cr>
на строке, начинающейся с diff --git
. Он откроет diff. Вы также можете посмотреть :Gdiff
. Вы можете посмотреть на Drew Neil vimcasts, Серия Fugitive.
Подробнее см.
:h fugitive
:h :Glog
:h :Gdiff
Ответ 5
Один из способов увидеть разницу фиксации - это:
:Gedit [revision]
Ответ 6
Сначала откройте файл, который вы хотите разграничить.
Если изменение зафиксировано, введите :Gdiff HEAD~1
.
Если изменение выполнено НЕ, введите :Gdiff HEAD
.
Ответ 7
Вы можете добиться этого, выполнив следующие шаги:
- Измените фокус на окно быстрого вызова и перейдите к строке, соответствующей интересующей вас фиксации.
- Найти хеш фиксации в строке и вытащить его (хеш теперь находится в регистре
0
.
- Закройте буфер быстрого исправления и сделайте
:Gdiff <C-r>0
.
Это должно привести к соответствующему разлому.
Вы можете автоматизировать шаги 2 и 3, добавив это сопоставление в ваш файл .vimrc
:
nnoremap <Leader>gd /\.git<CR>wwwyw<Esc>:cclose<CR>:Gdiff <C-r>0<CR>
Обратите внимание, что отображение предполагает, что ваш курсор находится в начале строки (перед частью .git//
).
Ответ 8
Чтобы выполнить различие с предыдущей версией, выполните следующие действия:
- использовать
Glog
- перейти к нужной версии
- type
C
, который открывает фиксацию
- перейти к строке содержит
diff --git a/you/file b/you/file
и нажать <cr>
Кроме того, чтобы развернуть предыдущую версию с версией в индексе (рабочая версия), вы можете сделать это:
- использовать
Glog
- перейти к нужной версии
- используйте
Gdiff
в этом новом окне без параметров. Готово!
Gdiff
без параметра будет различать текущий буфер с индексом index, который именно вы хотите
Вы также можете рассмотреть возможность использования плагина vim-unimpaired, который предоставляет две карты ]q
и [q
для навигации по списку быстрого удаления, (Также ]q
и [q
)
Ответ 9
Я написал функцию, которая позволяет вам сравнивать с предыдущей версией текущего файла. Я использую это для просмотра разницы между рабочей копией и ревизиями "n" раз назад.
Вот код, который нужно добавить в ваш .vimrc(требуется https://github.com/tpope/vim-fugitive):
"Diff the current file against n revision (instead of n commit)
function! Diffrev(...)
let a:target = @%
"check argument count
if a:0 == 0
"no revision number specified
let a:revnum=0
else
"revision number specified
let a:revnum=a:1
endif
let a:hash = system('git log -1 --skip='.a:revnum.' --pretty=format:"%h" ' . a:target)
execute 'Gdiff' . a:hash
endfunc
Вы можете вызвать функцию так (пример ниже отличается от третьей версии назад):
:call Diffrev(2)