¿Cuál es la forma más fácil de usar las routes de salida desde un command git en un command git subsiguiente?

Con demasiada frecuencia uso el mouse para hacer cosas como esta:

/home/me-$ git log --name-status -1 commit a10e63af1f4b1b2c28055fed55d4f2bb3225a541 Author: Me <me@me.com> Date: Tue Aug 18 13:04:04 2015 -0400 XYZ-376 make ctors public M x/y/z/Class1.java M x/y/z/Class2.java /home/me-$ git checkout -- x/y/z/Class2.java # <-- copy/paste with the mouse 

Sé que algunos commands de git aceptan comodines, y esto mitiga un poco este problema, pero me pregunto si hay una manera de hacer reference específica a las marcas de acceso, etc. de los commands anteriores.

¿Cómo puedo ejecutar commands como este sin usar el mouse y sin volver a escribir a mano las routes largas?

Solutions Collecting From Web of "¿Cuál es la forma más fácil de usar las routes de salida desde un command git en un command git subsiguiente?"

Normalmente utilizo una subshell ( $(<command in subshell here...>) ) para esto.

Por ejemplo, a veces tenía muchos files eliminados y tenía que git rm todos.

Existe el command git ls-files --deleted que devuelve los nombres de todos los files faltantes. Puedo combinarlo con git rm así:

 git rm $(git ls-files --deleted) 

Esto es un poco un mal ejemplo, porque (como descubrí más adelante), esta operación se puede lograr mucho más fácil con git add --all . Pero creo que ilustra el punto.


En su caso, si desea verificar todos los files que se han cambiado en la confirmación anterior, sería difícil analizar la salida de git log --name-status , porque contiene información adicional, pero podría usar algo como git diff HEAD^ --name-only lugar.

Asi que:

 git checkout $(git diff HEAD^ --name-only) 

lo hará en tu ejemplo.

Una cosa agradable que noté al usar la syntax $(...) es que funciona tanto en Bash como en PowerShell.

Este sería el tipo de cosas con las que ejecuta un shell bajo emacs, ejecuta todas sus shells en él y tiene un command para retroceder a través del búfer en busca de patrones en la salida.

Para recuperar resultados de un command anterior que no capturó dentro de la session de shell, tendrá que getlo de los búferes de su emulador de terminal de alguna manera. La familia xterm tiene una function configurable de "copyr todo el xclip -o scrollback" , luego xclip -o imprimirá la selección y usted podrá canalizarla a través de un filter de extracción.

Pero captura el resultado dentro de la session o lo elimina de los búferes de salida después, eso está en todos los lugares en los que haya estado la información.

En OS X, "Mouseless Copy" soportado por iTerm2 (y probablemente algunos otros emuladores de terminal) es una solución viable: https://www.iterm2.com/features.html

  • search alguna parte de la cadena (⌘F)
  • expanda la selección a la derecha (pestaña) o a la izquierda (pestaña-shift)
  • pegar la selección con (opción-ingresar) o copyr / pegar de la manera habitual