Come posso fare il checkout di un file da un altro commit in Magit


16

Ho un file foo.txtnel ramo Ae voglio controllare foo.txtdal ramo Ball'indice. Sulla riga di comando, farei questo:

$ git checkout B -- foo.txt

Voglio essere in grado di farlo in magit accedendo, trovando il commit che mi interessa (ad esempio l o B), trovando foo.txted eseguendo un comando, ma non riesco a capire come farlo.


Questa è ora una richiesta di funzionalità github.com/magit/magit/issues/2184 . Grazie per averlo
osservato

Risposte:


21

A partire da magit 2.11.0 questo è possibile direttamente dal dispatcher di reset ( X fe puoi specificare la revisione e il file):

inserisci qui la descrizione dell'immagine

Questo può essere fatto a livello di codice all'interno di magit usando magit-file-checkoutquale accetta una specifica di versione e il nome del file (grazie alla richiesta di funzionalità di @Emoses e all'implementazione di @Kyle Meyer). In precedenza la funzione era denominata magit-checkout-file(da v2.3.0 - v2.9.0).


4
magit-checkout-fileè ora obsoleto. Usa magit-file-checkoutinvece.
Sagar Jha,

3

Non sono a conoscenza di un modo integrato per farlo.

Supponendo che tu sia sul ramo A, un altro approccio sarebbe quello di diff ramo B ( d r ..B), quindi spostare il punto sul file che ti interessa. La pressione aapplicherà le modifiche all'albero di lavoro (piuttosto che all'indice).

Ho un comando nella mia configurazione per ripristinare o estrarre un file da una revisione, ma, nel suo stato attuale, non si adatta esattamente a quello che stai chiedendo perché non offrirà un buon default di revisione quando in Magit Revision modalità.

(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)))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.