Einfachste Möglichkeit, Git-Zweige zu wechseln

21

Im Moment verwalte ich fast alles, was mit Git zu tun hat, mit Fugitive, aber ich kann keinen guten Workflow finden, um die verfügbaren Zweige schnell zu visualisieren und zwischen ihnen zu wechseln.

Ich kann tun :Git checkout <branch-name>, das Problem ist, dass es sowohl Dateinamen als auch Zweige automatisch vervollständigt, und ich würde eine Zweigliste bevorzugen.

Sergio D. Márquez
quelle

Antworten:

12

Die Antworten hier sind die Wege, um dies zu erreichen:

Vanilla Terminal Vim

Drücken Sie CTRL- Zim normalen Modus werden Sie zurück in die Schale fallen und suspendieren Vim. Nachdem Sie Ihren git checkout [branchname]Typ ausgeführt haben, geben Sie den fgBefehl ein, zu dem angehaltenen Vim zurückzukehren, wodurch auch Vim zum Aktualisieren gezwungen wird.

Vanilla GUI Vim

Einige gvim-Implementierungen werden :shellUnterstützung haben , die eine Shell innerhalb von Vim mithilfe eines dummen Terminals öffnen. Es kann jedoch einfacher sein, einfach Folgendes einzugeben:

:!git checkout [branchname]

Dadurch wird der Befehl ausgeführt, ohne dass eine neue Shell-Eingabeaufforderung geöffnet werden muss. (Diese Option ist auch im Terminal Vim verwendbar).

Flüchtling

vim-fugitive ist ein Plugin, mit dem Sie Git in Vim verwenden können. Der Befehl wäre:

:Git checkout [branchname]

Vim-Merginal

vim-merginal ist ein Plugin, das vim-fugitive verwendet und eine benutzerfreundliche Oberfläche bietet.

  1. Typ :Merginal.
  2. Bewegen Sie den Cursor auf den gewünschten Zweig.
  3. Geben Sie ein cc, um diesen Zweig zu überprüfen.
Sukima
quelle
1
Es ist fugitive, nicht fugative, und das ist , was OP bereits verwendet wird .
muru
1
Geniale Antwort. vim-merginalist, wonach ich gesucht habe.
Sergio D. Márquez
1
Ich mag das, ctrl-zweil es die Dateien automatisch lädt. Mitarbeiter möchten ein tmux-Fenster für die Befehlszeile und ein tmux-Fenster für vim haben, aber wenn sie beim Zurückkehren zu vim auschecken oder zusammenführen, müssen sie zu jeder geöffneten Datei und zu :e!jedem Zeitpunkt wechseln . ( :bufdo e) das ist ein Schmerz, an den man sich erinnert. Stattdessen ist es einfacher, ctrl-zwenn dann fgpassiert, dass Vim das :eAuto-Magisch durchführt.
Sukima
I Eine weitere nette Erweiterung für Flüchtlinge, die Sie der Liste hinzufügen könnten: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez
Falls die Überprüfung der Git bereits abgeschlossen ist, kann :checktimees hilfreich sein, alle geöffneten Puffer neu zu laden.
LEI
12

Verwenden Sie das vim-merginal- Plugin ( flüchtige Erweiterung). Es bietet interaktive TUI für:

  • Liste der Filialen anzeigen
  • Auschecken von Zweigen aus dieser Liste
  • Neue Filialen anlegen
  • Zweige löschen
  • Zusammenführen von Zweigen
  • Zweige wieder aufbauen
  • Lösen von Zusammenführungskonflikten
  • Interaktion mit Fernbedienungen (Ziehen, Drücken, Abrufen, Verfolgen)
  • Anders als andere Branchen
  • Zweige umbenennen
  • Anzeigen des Git-Verlaufs für Zweige

Bildbeschreibung hier eingeben

adelarsq
quelle
7

Sie sollten Ihr Terminal umarmen. Wenn Sie verwenden CTRL-Z, wird Vim (oder welcher Prozess auch immer Sie gerade ausführen) im Hintergrund ausgeführt. Sie können dann beliebige Befehle ausführen, fgum den Prozess wieder in den Vordergrund zu bringen:

<CTRL-Z>
git checkout <tab>
fg
65-e9-7e-17
quelle
3
... und bei der Verwendung von GVim?
muru
2
:shellist der Weg zu Ihrem anderen bevorzugten Terminal-Emulator
65-e9-7e-17
2
Ich mag immer!git checkout [branchname]
bronzehedwick
5

Der Flüchtling Git checkout <branch>hat den Nachteil, dass der Filialname nicht automatisch vervollständigt wird. Mit fzf.vim habe ich folgenden Befehl erstellt:

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

Ich hoffe, Sie finden es nützlich

kubek2k
quelle
1

Die Antwort von @ kubek2k ist so phänomenal. Diese Lösung ist besser, als ich es mir hätte vorstellen und in weniger Codezeilen implementieren können, die ich mir hätte vorstellen können. Es öffnete mir die Tür, um den mächtigen Personalisierungsgebrauch von 'fzf' zu verstehen.

Ich habe es leicht modifiziert, um zusätzlich bereitzustellen:

  1. Verwendet fugitive, um die refs anstelle der Befehlszeile abzurufen (bessere Unterstützung für Windows)
  2. Listen Sie Tags zusammen mit Zweigen auf

Hier ist die leichte Modifikation:

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') })
radke
quelle