Najłatwiejszym sposobem przełączania gałęzi git


21

W tej chwili używam zbiegów do zarządzania prawie wszystkim związanymi z git, ale nie mogę znaleźć dobrego przepływu pracy, aby szybko wizualizować i przełączać się między dostępnymi gałęziami.

Mogę zrobić :Git checkout <branch-name>, problem polega na tym, że automatycznie uzupełnia zarówno nazwy plików, jak i gałęzie, i wolałbym listę gałęzi.

Odpowiedzi:


12

Kulminacją odpowiedzi tutaj są sposoby na osiągnięcie tego:

Vanilla Terminal Vim

Naciśnij CTRL- Zw trybie normalnym przeniesie Cię z powrotem do powłoki i zawiesi Vima. Po wykonaniu swój git checkout [branchname]wpisz fgpolecenie, aby powrócić do zawieszonego vim, które będą również zmusić Vima do odświeżenia.

Vanilla GUI Vim

Niektóre implementacje gvim będą miały :shellobsługę, która otworzy powłokę wewnątrz Vima za pomocą głupiego terminalu. Jednak może być łatwiej po prostu wpisać:

:!git checkout [branchname]

Spowoduje to wykonanie polecenia bez konieczności otwierania nowego polecenia powłoki. (Ta opcja jest również dostępna w terminalu Vim).

vim-uciekinier

vim-fugitive to wtyczka, która pozwala używać Gita z poziomu Vima. Poleceniem byłoby:

:Git checkout [branchname]

Vim-Finalinal

vim-conjinal to wtyczka, która używa vim-fugitive i zapewnia przyjazny interfejs użytkownika.

  1. Wpisz :Merginal.
  2. Przesuń kursor do żądanej gałęzi.
  3. Wpisz, ccaby sprawdzić tę gałąź.

1
To fugitive, nie fugative, i to, co PO już korzysta.
muru

1
Świetna odpowiedź. vim-merginaltego szukałem.
Sergio D. Márquez,

1
Podoba mi się, ctrl-zponieważ automatycznie ładuje pliki. Współpracownicy lubią mieć okno tmux dla wiersza poleceń i jedno dla vima, ale kiedy robią kasy lub łączą się po powrocie do vima, muszą przejść do każdego otwartego pliku i za :e!każdym razem. ( :bufdo e) co jest bólem do zapamiętania. Zamiast tego łatwiej jest ctrl-zwtedy, gdy się fgzdarzy, Vim wykonuje :eauto-magię.
Sukima,

I Kolejne fajne zbiegające rozszerzenie, które możesz dodać do listy: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez

W przypadku, gdy sprawdzanie git zostało już wykonane, :checktimeprzydaje się, aby ponownie załadować wszystkie otwarte bufory.
LEI,

12

Użyj wtyczki vim-conjinal ( rozszerzenie ulotne ). Oferuje interaktywny TUI dla:

  • Przeglądanie listy oddziałów
  • Sprawdzanie oddziałów z tej listy
  • Tworzenie nowych oddziałów
  • Usuwanie oddziałów
  • Scalanie gałęzi
  • Rebasing oddziałów
  • Rozwiązywanie konfliktów scalania
  • Interakcja z pilotami (ciągnięcie, pchanie, pobieranie, śledzenie)
  • Różni się od innych gałęzi
  • Zmiana nazw oddziałów
  • Przeglądanie historii git dla oddziałów

wprowadź opis zdjęcia tutaj


7

Powinieneś objąć swój terminal. Jeśli go użyjesz CTRL-Z, uruchomi on Vima w tle (lub dowolny proces, który aktualnie uruchomisz), a następnie możesz uruchomić dowolne polecenia, fgaby przywrócić proces na pierwszy plan:

<CTRL-Z>
git checkout <tab>
fg

3
... a kiedy korzystasz z GVim?
muru

2
:shellto sposób na przejście do alternatywnego emulatora terminalu
lub naciśnięcie klawisza Alt

2
Zawsze lubię!git checkout [branchname]
bronzehedwick,

5

Zbieg Git checkout <branch>ma tę wadę, że nie uzupełnia automatycznie nazwy oddziału. Za pomocą fzf.vim stworzyłem to polecenie:

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')
            \ })

mam nadzieję, że okażą się przydatne


1

Odpowiedź udzielona przez @ kubek2k jest tak fenomenalna. To rozwiązanie jest lepsze, niż mogłem sobie wyobrazić i zaimplementowane w mniejszej liczbie wierszy kodu, które mogłem zobrazować. Otworzyło to drzwi, aby pomóc mi zrozumieć potężne użycie „fzf” w personalizacji.

Lekko zmodyfikowałem go, aby dodatkowo zapewnić:

  1. Korzysta ze zbiegów, aby uzyskać odwołania zamiast wiersza poleceń (lepsza obsługa systemu Windows)
  2. Wyświetl tagi wraz z oddziałami

Oto niewielka modyfikacja:

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') })
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.