2013-06-16 12 views
52

La domanda riguarda la modalità Magit major per la funzione Emacs e meno su come eseguire questa operazione tramite l'interfaccia della riga di comando.Magit ripristina il singolo file

Ho solo un repository Git locale. Come posso ripristinare un file selezionato nella sua versione precedente? Credo che il comando Git per questo deve essere qualcosa come git checkout HEAD^ path/to/file ma potrei sbagliarmi anche qui, solo a indovinare davvero.

Quello che sto cercando è essenzialmente la stessa cosa di C-x v u nel buffer vc-dir.

In sostanza, quello che speravo di fare è stato:

  • eliminare il file modificato.

  • pull dal repository locale.

Ma Magit non sembra essere in grado di farlo, sembra preferire per eliminare solo il file, invece di ripristino.

+0

(1) Il buffer di cronologia di Magit supporta sicuramente (anche se non ricordo come), avete bisogno di altri mezzi (ad esempio in '* magit-status *')? (2) Se vuoi solo tornare alla base, perché non usare la 'minore modalità' vc '' C-x v u'? – lukstafi

+0

Stai parlando di scartare le modifiche non salvate (ovvero ripristinare la versione attualmente impegnata) o tornare a un commit precedente? 'git checkout HEAD file' scarterebbe le modifiche non eseguite. 'git checkout HEAD^file' ripristinerebbe anche le eventuali modifiche apportate al file nel commit più recente al repository. Se quel commit non coinvolge il file in questione, allora '^' è effettivamente ridondante. Passando al tuo sommario "elimina e tira", vuoi semplicemente scartare le modifiche non eseguite, nel qual caso la risposta di Rémi è quella che desideri. – phils

risposta

66

In Magit devi solo andare sul file o sul file che desideri ripristinare e utilizzare k per annullare una modifica. Vedere la documentazione relativa a https://magit.vc/manual/1.4/magit/Staging-and-Committing.html per ulteriori dettagli.

+1

L'azione dipende da dove la usi. Cancellerà il file se il file non è tracciato da git. Ma se il file è tracciato, scartare la modifica. Nota che una volta che il tuo file è in git, è difficile eliminarlo completamente dalla cronologia. –

+2

Penso che abbastanza ragionevolmente possa essere usato anche al contrario, dopo 'commit': se hai impegnato il file insieme ad altre modifiche, puoi' revert' con 'v', e poi' k' le modifiche inverse dove vuoi per preservare le modifiche. – lukstafi

12

Con il file aperto, è possibile M-x magit-file-checkout.

+0

quale versione di emacs/magit? –

+0

Disponibile da Magit 2.3.0. –

+2

'magit-checkout-file' è deprecato, usare invece' magit-file-checkout'. – xged