Como faço o checkout de um arquivo de outro commit no Magit

16

Eu tenho um arquivo foo.txtno branch Ae quero fazer check-out foo.txtdo branch Bno índice. Na linha de comando, eu faria o seguinte:

$ git checkout B -- foo.txt

Eu quero ser capaz de fazer isso no magit, registrando, encontrando o commit em que estou interessado (por exemplo l o B), encontrando foo.txte executando algum comando, mas não consigo descobrir como fazê-lo.

Emoses
fonte
Agora, essa é uma solicitação de recurso github.com/magit/magit/issues/2184 . Agradecimentos para olhar para ele, mantenedores
Emoses

Respostas:

21

A partir do magit 2.11.0, isso é possível diretamente do distribuidor de redefinição ( X fe você pode especificar a revisão e o arquivo):

insira a descrição da imagem aqui

Isso pode ser feito programaticamente dentro do magit usando o magit-file-checkoutque aceita uma especificação de versão e o nome do arquivo (graças à solicitação de recurso do @Emoses e à implementação do @Kyle Meyer). Anteriormente, a função era nomeada magit-checkout-file(da v2.3.0 - v2.9.0).

ebpa
fonte
4
magit-checkout-fileagora está obsoleto. Use em magit-file-checkoutvez disso.
Sagar Jha
3

Não conheço uma maneira embutida de fazer isso.

Supondo que você esteja no ramo A, outra abordagem seria diferenciar o ramo B ( d r ..B) e, em seguida, mover o ponto para o arquivo no qual você está interessado. Pressionar aaplicará essas alterações na árvore de trabalho (e não no índice).

Eu tenho um comando na minha configuração para redefinir ou retirar um arquivo de uma revisão, mas, no estado atual, ele não se encaixa exatamente no que você está pedindo, porque não oferece um bom padrão de revisão quando estiver no Magit Revision 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
fonte