Самый простой способ переключения веток Git


21

Сейчас я использую fugitive для управления почти всем, что касается git, но я не могу найти хороший рабочий процесс для быстрой визуализации и переключения между доступными ветвями.

Я могу сделать :Git checkout <branch-name>, проблема в том, что он автоматически заполняет как имена файлов, так и ветви, и я бы предпочел список ветвей.

Ответы:


12

Чтобы завершить ответы, вот способы сделать это:

Ванильный Терминал Vim

Нажмите CTRL- Zв обычном режиме вы вернетесь обратно в оболочку и приостановите Vim. После выполнения вашего git checkout [branchname]типа введите fgкоманду, чтобы вернуться к приостановленному Vim, что также заставит Vim обновиться.

Ванильный графический интерфейс Vim

Некоторые реализации gvim будут иметь :shellподдержку, которая откроет оболочку внутри Vim, используя тупой терминал. Однако может быть проще просто набрать:

:!git checkout [branchname]

Это выполнит команду без необходимости открывать новое приглашение оболочки. (Эта опция также может использоваться в терминале Vim).

ВИМ-беглец

vim-fugitive - это плагин, который позволяет вам использовать Git из Vim. Команда будет:

:Git checkout [branchname]

ВИМ-merginal

vim-merginal - это плагин, который использует vim-fugitive и предоставляет удобный для пользователя интерфейс.

  1. Тип :Merginal.
  2. Переместите курсор на нужную ветку.
  3. Тип, ccчтобы проверить эту ветку.

1
Это fugitive, нет fugative, и это то, что ОП уже использует.
Муру

1
Потрясающий ответ. vim-merginalэто то, что я искал.
Серхио Д. Маркес

1
Мне нравится, ctrl-zпотому что он автоматически загружает файлы. Сотрудникам нравится иметь окно tmux для командной строки и одно для vim, но когда они делают извлечение или объединяются, когда возвращаются в vim, они должны переходить к каждому открытому файлу и :e!каждый раз. ( :bufdo e) что боль помнить. Вместо этого легче, ctrl-zчем когда fgVim происходит :eавтоматически.
Сукима

I Еще одно приятное беглое расширение, которое вы можете добавить в список: github.com/sodapopcan/vim-twiggy
Серхио Д. Маркес,

В случае, если проверка git уже выполнена, :checktimeпригодится перезагрузить все открытые буферы.
LEI

12

Используйте ВИМ-merginal плагин ( беглый расширение). Он предлагает интерактивный TUI для:

  • Просмотр списка филиалов
  • Проверка веток из этого списка
  • Создание новых веток
  • Удаление веток
  • Слияние ветвей
  • Ребазинг филиалов
  • Решение конфликтов слияния
  • Взаимодействие с пультами дистанционного управления (вытягивание, нажатие, выборка, отслеживание)
  • Отличаясь от других ветвей
  • Переименование филиалов
  • Просмотр истории git для веток

введите описание изображения здесь


7

Вы должны принять ваш терминал. Если вы используете CTRL-Z, это будет фон Vim (или любой процесс, который вы в настоящее время выполняете), тогда вы можете запустить любые команды, которые вы хотите, fgчтобы вернуть процесс на передний план:

<CTRL-Z>
git checkout <tab>
fg

3
... а при использовании GVim?
Муру

2
:shellэто способ перейти или
изменить вкладку

2
Мне всегда нравится!git checkout [branchname]
bronzehedwick

5

У беглеца Git checkout <branch>есть недостаток в том, что он не выполняет автозаполнение имени ветви. Используя fzf.vim я создал эту команду:

function! s:changebranch(branch) 
    execute 'Git checkout' . a:branch
    call feedkeys("i")
endfunction

command! -bang Gbranch call fzf#run({
            \ 'source': 'git branch -a --no-color | grep -v "^\* " ', 
            \ 'sink': function('s:changebranch')
            \ })

Надеюсь, что вы найдете ее полезной


1

Ответ @ kubek2k настолько феноменален. Это решение лучше, чем я мог себе представить, и реализовал его в меньшем количестве строк кода, чем я мог себе представить. Это открыло дверь, чтобы помочь мне понять мощное персонализированное использование «fzf».

Я немного изменил его, чтобы дополнительно предоставить:

  1. Использует беглеца, чтобы получить ссылки вместо командной строки (лучшая поддержка для окон)
  2. Перечислите теги вместе с ветками

Вот небольшая модификация:

function! s:gitCheckoutRef(ref) 
    execute('Git checkout ' . a:ref)
    " call feedkeys("i")
endfunction
function! s:gitListRefs()
   let l:refs = execute("Git for-each-ref --format='\\%(refname:short)'")
   return split(l:refs,'\r\n*')[1:] "jump past the first line which is the git command
endfunction
command! -bang Gbranch call fzf#run({ 'source': s:gitListRefs(), 'sink': function('s:gitCheckoutRef'), 'dir':expand('%:p:h') })
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.