Wie checke ich eine Datei von einem anderen Commit in Magit aus?

16

Ich habe eine Datei foo.txtim Zweig Aund möchte foo.txtvom Zweig Bin den Index auschecken. In der Befehlszeile würde ich Folgendes tun:

$ git checkout B -- foo.txt

Ich möchte in der Lage sein, dies in magit zu tun, indem ich mich anmelde, den Commit finde, an dem ich interessiert bin (zB l o B), foo.txteinen Befehl finde und ihn ausführe, aber ich kann nicht herausfinden, wie ich das mache.

Emoses
quelle
Dies ist jetzt eine Feature-Anfrage unter github.com/magit/magit/issues/2184 . Vielen Dank fürs Anschauen, Betreuer
Emoses

Antworten:

21

Ab Magit 2.11.0 ist dies direkt über den Reset-Dispatcher möglich ( X fund Sie können die Revision und die Datei angeben):

Bildbeschreibung hier eingeben

Dies kann programmgesteuert in magit erfolgen, wobei magit-file-checkouteine Versionsspezifikation und der Dateiname akzeptiert werden (dank @Emoses 'Feature-Anfrage und der Implementierung von @Kyle Meyer). Bisher wurde die Funktion benannt magit-checkout-file(von v2.3.0 - v2.9.0).

ebpa
quelle
4
magit-checkout-fileist jetzt überholt. Verwenden Sie magit-file-checkoutstattdessen.
Sagar Jha
3

Mir ist kein integrierter Weg bekannt, dies zu tun.

Angenommen, Sie befinden sich in Zweig A, besteht ein anderer Ansatz darin, Zweig B ( d r ..B) zu unterscheiden und dann den Punkt auf die Datei zu verschieben, an der Sie interessiert sind. Durch Drücken von awerden diese Änderungen auf die Arbeitsstruktur (und nicht auf den Index) angewendet.

Ich habe in meiner Konfiguration einen Befehl zum Zurücksetzen oder Auschecken einer Datei aus einer Revision, aber im aktuellen Zustand entspricht sie nicht genau Ihren Anforderungen, da sie in Magit Revision keinen guten Revisionsstandard bietet Modus.

(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
quelle