¿Cómo pago un archivo de otro commit en Magit?

16

Tengo un archivo foo.txten rama A, y quiero retirarlo foo.txtde la rama Bal índice. En la línea de comando, haría esto:

$ git checkout B -- foo.txt

Quiero poder hacer esto de manera mágica yendo al registro, buscando la confirmación que me interesa (por ejemplo l o B), encontrando foo.txty ejecutando algún comando, pero no puedo encontrar la manera de hacerlo.

Emoses
fuente
Esta es ahora una solicitud de función github.com/magit/magit/issues/2184 . Gracias por mirarlo, mantenedores
Emoses

Respuestas:

21

A partir de magit 2.11.0 esto es posible directamente desde el despachador de reinicio ( X fy puede especificar la revisión y el archivo):

ingrese la descripción de la imagen aquí

Esto se puede hacer mediante programación usando magit, magit-file-checkoutque acepta una especificación de versión y el nombre de archivo (gracias a la solicitud de función de @Emoses y la implementación de @Kyle Meyer). Anteriormente se nombraba la función magit-checkout-file(de v2.3.0 - v2.9.0).

ebpa
fuente
44
magit-checkout-fileAhora está obsoleto. Usar en su magit-file-checkoutlugar.
Sagar Jha
3

No conozco una forma integrada de hacer esto.

Suponiendo que está en la rama A, otro enfoque sería diferenciar la rama B ( d r ..B), y luego mover el punto al archivo que le interesa. Al presionar ase aplicarán esos cambios al árbol de trabajo (en lugar del índice).

Tengo un comando en mi configuración para restablecer o retirar un archivo de una revisión, pero, en su estado actual, no se ajusta exactamente a lo que está pidiendo porque no ofrecerá una buena revisión predeterminada cuando esté en Revisión Magit modo.

(defun km/magit-reset-file (rev file &optional checkout)
  "Reset FILE from revision REV.

If prefix argument CHECKOUT is non-nil, checkout FILE from REV
instead.

\(git reset REV -- FILE)
\(git checkout REV -- FILE)"
  (interactive
   (let ((rev (magit-read-branch-or-commit "Revision")))
     (list rev (magit-read-file-from-rev rev "File") current-prefix-arg)))
  (magit-with-toplevel
    (magit-run-git (if checkout "checkout" "reset")
                   rev "--" file)))
Kyle Meyer
fuente