Il modo più semplice per cambiare i rami git


21

In questo momento sto usando il fuggitivo per gestire quasi tutto ciò che riguarda Git, ma non riesco a trovare un buon flusso di lavoro per visualizzare rapidamente e passare tra i rami disponibili.

Posso fare :Git checkout <branch-name>, il problema è che completa automaticamente sia i nomi dei file che i rami e preferirei un elenco di rami.

Risposte:


12

Per culminare qui le risposte sono i modi per raggiungere questo obiettivo:

Vanilla Terminal Vim

Premi CTRL- Zin modalità normale ti riporterà indietro nella shell e sospenderà Vim. Dopo aver eseguito git checkout [branchname]il fgcomando digita il comando per tornare al Vim sospeso che costringerà anche Vim ad aggiornarsi.

Vanilla GUI Vim

Alcune implementazioni di gvim avranno :shellsupporto che aprirà una shell all'interno di Vim usando un terminale stupido. Tuttavia, potrebbe essere più semplice digitare:

:!git checkout [branchname]

Questo eseguirà il comando senza dover aprire un nuovo prompt della shell. (Questa opzione è utilizzabile anche nel terminale Vim).

vim-latitante

vim-latitante è un plugin che consente di utilizzare Git dall'interno Vim. Il comando sarebbe:

:Git checkout [branchname]

vim-merginal

vim-merginal è un plugin che utilizza vim-fuggitivo e fornisce un'interfaccia intuitiva.

  1. Tipo :Merginal.
  2. Sposta il cursore sul ramo desiderato.
  3. Digitare ccper verificare quel ramo.

1
Non lo fugitiveè fugative, ed è quello che OP sta già utilizzando.
Muru,

1
Risposta fantastica. vim-merginalè quello che stavo cercando.
Sergio D. Márquez,

1
Mi piace ctrl-zperché carica automaticamente i file. Ai colleghi piace avere una finestra tmux per la riga di comando e una per vim ma quando fanno un checkout o si uniscono quando tornano a vim devono andare su ogni file aperto e :e!ogni volta. ( :bufdo e) che è un dolore da ricordare. Invece è più facile ctrl-zpoi quando fgaccade Vim esegue l' :eauto-magicamente.
Sukima,

I Un'altra bella estensione fuggitiva che potresti aggiungere all'elenco: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez

Nel caso in cui il checkout di git sia già stato eseguito, :checktimeè utile ricaricare tutti i buffer aperti.
LEI

12

Usa il plugin vim-merginal ( estensione fuggitiva ). Offre TUI interattivo per:

  • Visualizzazione dell'elenco dei rami
  • Verifica i rami da tale elenco
  • Creare nuove filiali
  • Eliminazione di rami
  • Unire i rami
  • Rebasing rami
  • Risolvere i conflitti di unione
  • Interagire con i telecomandi (tirare, spingere, recuperare, tracciare)
  • Diffondendo contro altri rami
  • Rinominare i rami
  • Visualizzazione della cronologia git per i rami

inserisci qui la descrizione dell'immagine


7

Dovresti abbracciare il tuo terminale. Se lo usi CTRL-Z, metterà in background Vim (o qualunque processo tu stia attualmente eseguendo), quindi puoi eseguire tutti i comandi che vuoi, fgper riportare il processo in primo piano:

<CTRL-Z>
git checkout <tab>
fg

3
... e quando si utilizza GVim?
muru,

2
:shellè il modo di andare o fare il
tab alternativo

2
Mi piace sempre!git checkout [branchname]
bronzehedwick il

5

Il fuggitivo Git checkout <branch>ha un aspetto negativo che non completa automaticamente il nome del ramo. Usando fzf.vim ho creato questo comando:

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

spero che lo trovi utile


1

La risposta fornita da @ kubek2k è così fenomenale. Questa soluzione è migliore di quanto avrei potuto immaginare e implementare in meno righe di codice che avrei potuto immaginare. Mi ha aperto le porte per aiutarmi a comprendere il potente uso della personalizzazione di "fzf".

L'ho leggermente modificato per fornire inoltre:

  1. Usa il fuggitivo per ottenere i riferimenti invece della riga di comando, (miglior supporto per windows)
  2. Elenca i tag insieme ai rami

Ecco la leggera modifica:

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') })
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.