Git Fugitive cómo agregar un fragmento de código seleccionado visualmente

14

Me gustaría saber si podría seleccionar algún código en modo visual, ¿y git addeso?

Lo comprobé con fugitive.vim pero no encontré cómo hacerlo.

Es posible ? ¿O hay algún otro complemento para hacerlo?

albttx
fuente

Respuestas:

14

Puede haber otras formas, pero este enfoque le permite hacer más que agregar un fragmento, por lo que tiendo a usarlo bastante.

  1. Ejecutar :Gdiffcomando Se abrirá una división con la versión del archivo actual que se encuentra actualmente en el índice a la izquierda / parte superior de la ventana original.

  2. Mientras está en la ventana original (derecha o inferior), realice una selección visual de los cambios que desea git add.

  3. Ejecutar :diffputcomando, que puede operar en un rango. (la dpclave no funciona en modo Visual).

  4. Cierre esa segunda ventana guardando los cambios para actualizar el archivo en el índice. Aquí puede editarlo como desee antes de guardarlo, no tiene que coincidir exactamente con la versión original o nueva del archivo.

Tenga en cuenta que es :diffputposible que no siempre le brinde lo que esperaría dependiendo de la estructura de los cambios (especialmente si está cometiendo solo una parte del bloque contiguo de cambios). Así que no olvide validar commit. Sin embargo, en la mayoría de las situaciones prácticas funciona bien.

xaizek
fuente
7

Vimcasts tiene una gran serie en Fugitive.vim . El episodio Fugitive.vim: trabajar con el índice git sería el más útil para su pregunta.

Puede usar :Gdiffpara organizar solo partes de un archivo. La ejecución :Gdiffle mostrará el archivo actual "diff-ed" con el escenario / índice. Usted puede simplemente utilizar los comandos diff de Vim ( dp, do, :diffput, y :diffget) para mover el trozo de la etapa / index. Luego escribe el archivo etapa / índice como lo haría con cualquier otro búfer, :w/ :x.

Peter Rincker
fuente
Estoy usando :Gstatus+ Dpara hacer lo mismo con fugitivo. De esta manera también puedo elegir el archivo en el que estoy operando entre la lista de archivos que se han modificado.
Luc Hermitte
6

Como preguntó específicamente sobre soluciones que usan otros complementos, notaré que también puede organizar selecciones visuales usando vimagit , que es un complemento de Git (basado en el popular complemento Magit del otro editor ) centrado en la visualización, puesta en escena y confirmación de cambios.

Para organizar una selección visual usando Vimagit:

  1. Ejecute el :Magitcomando para abrir un nuevo búfer que muestre todos los trozos modificados en su repositorio (no solo en un archivo),

  2. Localice las líneas que desea poner en escena y realice su visualselección,

  3. Pulse el mapeo "etapa": S.

Rico
fuente
6

Etapa completa o trozos parciales con vim-gitgutter

  1. Etapa completa Hunk

    • <Leader>hs o
    • :GitGutterStageHunk
  2. Etapa Parte de un trozo de solo adiciones (desde 8/2019)

    • Modo visual

      • {Visual}<Leader>hs
      • :'<,'>GitGutterStageHunk
        ( '<,'>como siempre se insertan para ti)
    • Rango

      • :42,45GitGutterStageHunk
  3. Etapa Parte de cualquier Hunk a través de la ventana de vista previa (desde 8/2019)

    • Vista previa del trozo, por ejemplo <Leader>hp
    • Moverse a la ventana de vista previa, p. Ej. :wincmd P
    • Elimine las líneas que no desea representar
    • Etapa de las líneas restantes, por ejemplo <Leader>hso:GitGutterStageHunk

Actualizado: 17.8.2019 debido a confirmaciones recientes bc1d28d y b036fcf

Hotschke
fuente
Pidió vim-fugitivo, no vim-gitgutter
giggi__