A maneira mais fácil de alternar ramos git

21

No momento, estou usando o fugitivo para gerenciar quase tudo relacionado ao git, mas não consigo encontrar um bom fluxo de trabalho para visualizar e alternar rapidamente entre as ramificações disponíveis.

Eu posso fazer :Git checkout <branch-name>, o problema é que ele preenche automaticamente os nomes de arquivos e as ramificações, e eu prefiro uma lista de ramificações.

Sergio D. Márquez
fonte

Respostas:

12

Para culminar com as respostas, aqui estão as maneiras de conseguir isso:

Vanilla Terminal Vim

Pressione CTRL- Zno modo normal , você retornará ao shell e suspenderá o Vim. Depois de executar seu git checkout [branchname]tipo, o fgcomando retorne ao Vim suspenso, o que também forçará a atualização do Vim.

Vanilla GUI Vim

Algumas implementações do gvim terão :shellsuporte que abrirá um shell dentro do Vim usando um terminal burro. No entanto, pode ser mais fácil digitar:

:!git checkout [branchname]

Isso executará o comando sem precisar abrir um novo prompt de shell. (Esta opção também é utilizável no terminal Vim).

vim-fugitivo

O vim-fugitive é um plugin que permite usar o Git no Vim. O comando seria:

:Git checkout [branchname]

vim-merginal

O vim-merginal é um plugin que usa vim-fugitive e fornece uma interface amigável ao usuário.

  1. Digite :Merginal.
  2. Mova o cursor para o ramo que deseja.
  3. Digite ccpara verificar essa ramificação.
Sukima
fonte
1
Não é fugitive, fugativee é isso que o OP já está usando.
Muru
1
Resposta incrível. vim-merginalé o que eu estava procurando.
Sergio D. Márquez
1
Eu gosto do ctrl-zporque ele carrega automaticamente os arquivos. Os colegas de trabalho gostam de ter uma janela tmux para a linha de comando e outra para o vim, mas quando fazem uma verificação geral ou mesclam quando retornam ao vim, precisam ir a cada arquivo aberto e a :e!cada vez. ( :bufdo e) que é uma dor para lembrar. Em vez disso, é mais fácil ctrl-zquando o fgVim executa o :eauto-magicamente.
Sukima 25/11
I Outra extensão fugitivo agradável você pode adicionar à lista: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez
Caso o git checkout já esteja pronto, :checktimeé útil recarregar todos os buffers abertos.
LEI
12

Use o plug - in vim-merginal ( extensão fugitiva ). Oferece TUI interativa para:

  • Visualizando a lista de ramificações
  • Verificando ramificações dessa lista
  • Criando novas ramificações
  • Excluindo ramificações
  • Mesclando ramificações
  • Rebasing branches
  • Resolvendo conflitos de mesclagem
  • Interagindo com controles remotos (puxando, empurrando, buscando, rastreando)
  • Diferenciando-se de outros ramos
  • Renomeando ramificações
  • Visualizando o histórico do git para ramificações

insira a descrição da imagem aqui

adelarsq
fonte
7

Você deve abraçar seu terminal. Se você usar CTRL-Z, ele exibirá o Vim em segundo plano (ou qualquer processo que você esteja executando atualmente), e poderá executar os comandos que desejar, fgpara trazer o processo de volta ao primeiro plano:

<CTRL-Z>
git checkout <tab>
fg
65-e9-7e-17
fonte
3
... e ao usar o GVim?
Muru
2
:shellé o caminho a percorrer ou alternar
alternadamente
2
Eu sempre gosto!git checkout [branchname]
bronzehedwick
5

O fugitivo Git checkout <branch>tem uma desvantagem de não preencher automaticamente o nome do ramo. Usando o fzf.vim , criei este 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')
            \ })

espero que você ache útil

kubek2k
fonte
1

A resposta fornecida pelo @ kubek2k é tão fenomenal. Essa solução é melhor do que eu poderia ter imaginado e implementado em menos linhas de código que eu poderia ter imaginado. Ele abriu a porta para me ajudar a entender o uso poderoso da personalização do 'fzf'.

Eu o modifiquei levemente para fornecer adicionalmente:

  1. Utiliza o fugitivo para obter os árbitros em vez da linha de comando (melhor suporte para o Windows)
  2. Listar tags junto com ramificações

Aqui está a pequena modificação:

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
fonte