La forma más fácil de cambiar ramas git


21

En este momento estoy usando fugitivo para administrar casi todo lo relacionado con git, pero no puedo encontrar un buen flujo de trabajo para visualizar y cambiar rápidamente entre las ramas disponibles.

Puedo hacerlo :Git checkout <branch-name>, el problema es que autocompleta tanto nombres de archivos como ramas, y preferiría una lista de ramas.

Respuestas:


12

Para culminar las respuestas aquí están las formas de lograr esto:

Vanilla Terminal Vim

Presione CTRL- Zen modo normal lo regresará al shell y suspenderá Vim. Después de ejecutar su git checkout [branchname]tipo, el fgcomando para volver al Vim suspendido, que también obligará a Vim a actualizarse.

Vanilla GUI Vim

Algunas implementaciones de gvim tendrán :shellsoporte que abrirá un shell dentro de Vim usando una terminal tonta. Sin embargo, puede ser más fácil simplemente escribir:

:!git checkout [branchname]

Esto ejecutará el comando sin tener que abrir un nuevo símbolo del sistema. (Esta opción también se puede usar en el terminal Vim).

vim-fugitivo

vim-fugitive es un complemento que te permite usar Git desde Vim. El comando sería:

:Git checkout [branchname]

vim-merginal

vim-merginal es un complemento que utiliza vim-fugitive y proporciona una interfaz fácil de usar.

  1. Tipo :Merginal.
  2. Mueva el cursor a la rama que desee.
  3. Escriba ccpara ver esa rama.

1
Es fugitive, no fugative, y eso es lo que OP ya está usando.
muru

1
Impresionante respuesta. vim-merginales lo que estaba buscando
Sergio D. Márquez

1
Me gusta ctrl-zporque carga automáticamente los archivos. A los compañeros de trabajo les gusta tener una ventana tmux para la línea de comando y otra para vim, pero cuando hacen un pago o se fusionan cuando regresan a vim, tienen que ir a cada archivo abierto y :e!cada vez. ( :bufdo e) que es un dolor para recordar. En cambio, es más fácil que ctrl-zcuando fgVim realiza el :eauto-mágico.
Sukima

Otra buena extensión para fugitivos que podría agregar a la lista: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez

En caso de que el pago de git ya esté hecho, :checktimees útil para recargar todos los buffers abiertos.
LEI

12

Use el complemento vim-merginal ( extensión fugitiva ). Ofrece TUI interactiva para:

  • Ver la lista de sucursales
  • Verificando ramas de esa lista
  • Creando nuevas sucursales
  • Eliminar ramas
  • Fusionar ramas
  • Rebasando ramas
  • Resolver conflictos de fusión
  • Interactuar con controles remotos (jalar, empujar, buscar, rastrear)
  • Diferenciación contra otras ramas.
  • Renombrar ramas
  • Ver el historial de git para sucursales

ingrese la descripción de la imagen aquí


7

Deberías abrazar tu terminal. Si lo usa CTRL-Z, pondrá en segundo plano Vim (o cualquier proceso que esté ejecutando actualmente), luego puede ejecutar los comandos que desee, fgpara que el proceso vuelva a primer plano:

<CTRL-Z>
git checkout <tab>
fg

3
... y cuando usas GVim?
muru

2
:shelles el camino a seguir o alt tabulación en su otro emulador de terminal favorito
65-e9-7e-17

2
Siempre me gusta!git checkout [branchname]
bronzehedwick

5

El fugitivo Git checkout <branch>tiene el inconveniente de que no completa automáticamente el nombre de la rama. Usando fzf.vim he creado 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')
            \ })

Esperamos que te sea útil


1

La respuesta proporcionada por @ kubek2k es tan fenomenal. Esa solución es mejor de lo que podría haber imaginado e implementado en menos líneas de código que podría haber imaginado. Abrió la puerta para ayudarme a comprender el poderoso uso de personalización de 'fzf'.

Lo he modificado ligeramente para proporcionar adicionalmente:

  1. Hace uso de fugitivo para obtener las referencias en lugar de la línea de comando (mejor soporte para Windows)
  2. Lista de etiquetas junto con ramas

Aquí está la ligera modificación:

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') })
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.