Manière la plus simple de changer de branche git

21

En ce moment, j'utilise fugitif pour gérer presque tout ce qui est lié à git, mais je ne trouve pas un bon flux de travail pour visualiser rapidement et basculer entre les branches disponibles.

Je peux le faire :Git checkout <branch-name>, le problème est qu'il complète automatiquement les noms de fichiers et les branches, et je préférerais une liste de branches.

Sergio D. Márquez
la source

Réponses:

12

Pour aboutir aux réponses, voici les moyens d'y parvenir:

Vanilla Terminal Vim

Appuyez sur CTRL- Zen mode normal vous ramènera dans le shell et suspendra Vim. Après avoir exécuté votre git checkout [branchname]type, la fgcommande pour revenir au Vim suspendu qui forcera également Vim à se rafraîchir.

Vanilla GUI Vim

Certaines implémentations de gvim auront un :shellsupport qui ouvrira un shell à l'intérieur de Vim en utilisant un terminal stupide. Cependant, il peut être plus facile de taper simplement:

:!git checkout [branchname]

Cela exécutera la commande sans avoir à ouvrir une nouvelle invite shell. (Cette option est également utilisable dans le terminal Vim).

vim-fugitive

vim-fugitive est un plugin qui vous permet d'utiliser Git depuis Vim. La commande serait:

:Git checkout [branchname]

vim-merginal

vim-merginal est un plugin qui utilise vim-fugitive et fournit une interface conviviale.

  1. Tapez :Merginal.
  2. Déplacez le curseur sur la branche souhaitée.
  3. Tapez ccpour vérifier cette branche.
Sukima
la source
1
Ce n'est fugitivepas le cas fugative, et c'est ce qu'OP utilise déjà.
muru
1
Réponse géniale. vim-merginalest ce que je cherchais.
Sergio D. Márquez
1
J'aime le ctrl-zcar il charge automatiquement les fichiers. Les collègues aiment avoir une fenêtre tmux pour la ligne de commande et une pour vim mais quand ils font un checkout ou fusionnent quand ils reviennent à vim ils doivent aller à chaque fichier ouvert et à :e!chaque fois. ( :bufdo e) qui est une douleur à retenir. Au lieu de cela, il est plus facile de le faire ctrl-zlorsque fgVim effectue l' :eauto-magie.
Sukima
I Une autre belle extension fugitive que vous pourriez ajouter à la liste: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez
Dans le cas où le git checkout est déjà fait, :checktimeest pratique pour recharger tous les tampons ouverts.
LEI
12

Utilisez le plugin vim-merginal ( extension fugitive ). Il offre un TUI interactif pour:

  • Affichage de la liste des succursales
  • Extraire des branches de cette liste
  • Créer de nouvelles succursales
  • Suppression de branches
  • Fusion de succursales
  • Rebasage des branches
  • Résolution des conflits de fusion
  • Interagir avec les télécommandes (tirer, pousser, aller chercher, suivre)
  • Se différencier des autres branches
  • Renommer des succursales
  • Affichage de l'historique Git pour les branches

entrez la description de l'image ici

adelarsq
la source
7

Vous devez embrasser votre terminal. Si vous utilisez CTRL-Z, il mettra en arrière-plan Vim (ou quel que soit le processus que vous exécutez actuellement), alors vous pouvez exécuter toutes les commandes que vous souhaitez, fgpour ramener le processus au premier plan:

<CTRL-Z>
git checkout <tab>
fg
65-e9-7e-17
la source
3
... et lorsque vous utilisez GVim?
muru
2
:shellest le chemin à parcourir ou alt tabulation dans votre autre émulateur de terminal préféré
65-e9-7e-17
2
J'aime toujours!git checkout [branchname]
bronzehedwick
5

Le fugitif Git checkout <branch>a l'inconvénient de ne pas remplir automatiquement le nom de la branche. En utilisant fzf.vim, j'ai créé cette commande:

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

j'espère que vous le trouverez utile

kubek2k
la source
1

La réponse fournie par @ kubek2k est tellement phénoménale. Cette solution est meilleure que ce que j'aurais pu imaginer et implémentée en moins de lignes de code que j'aurais pu imaginer. Cela m'a ouvert la porte pour m'aider à comprendre la puissante utilisation de la personnalisation de «fzf».

Je l'ai légèrement modifié pour fournir en plus:

  1. Utilise le fugitif pour obtenir les références au lieu de la ligne de commande, (meilleur support pour Windows)
  2. Liste des balises avec des branches

Voici la légère modification:

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
la source