Найпростіший спосіб переключення гіток git


21

Зараз я використовую втікач для управління майже всіма пов'язаними з git, але я не можу знайти хороший робочий процес для швидкої візуалізації та переключення між доступними гілками.

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

Відповіді:


12

Щоб досягти кульмінації відповідей тут, є способи досягти цього:

Термінал ванільний Vim

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

Ванільний GUI Vim

Деякі реалізації gvim матимуть :shellпідтримку, яка відкриє оболонку всередині Vim за допомогою німого терміналу. Однак просто простіше ввести:

:!git checkout [branchname]

Це виконає команду без необхідності відкривати нову підказку оболонки. (Цей параметр також можна використовувати в терміналі Vim).

вим-втікач

vim-fugitive - плагін, що дозволяє використовувати Git зсередини Vim. Командою було б:

:Git checkout [branchname]

vim-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коли fgце станеться, Vim виконує :eавтоматичну магію.
Сукіма

I Ще одне приємне втікач, який ви можете додати до списку: github.com/sodapopcan/vim-twiggy
Серхіо Д. Маркес

Якщо перевірка git вже зроблена, :checktimeстане в нагоді перезавантажити всі відкриті буфери.
ЛЕІ

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. Використовує втікач, щоб отримати оновлення замість командного рядка (краща підтримка Windows)
  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.