Magit einzelne Datei zurücksetzen

77

Die Frage betrifft den Magit-Hauptmodus für die Emacs-Funktion und weniger die Vorgehensweise über die Befehlszeilenschnittstelle.

Ich habe nur ein lokales Git-Repository. Wie würde ich eine ausgewählte Datei auf ihre vorherige Version zurücksetzen? Ich glaube, dass der Git-Befehl dafür so etwas wie sein muss, git checkout HEAD^ path/to/fileaber ich kann mich auch hier irren, nur wirklich raten.

Was ich suche, ist im Wesentlichen dasselbe wie C-x v uim vc-dirPuffer.

Im Wesentlichen hatte ich gehofft:

  • Löschen Sie die geänderte Datei.

  • aus dem lokalen Repo ziehen.

Aber Magit scheint das nicht zu können, es scheint lieber zu sein, die Datei zu löschen, als sie wiederherzustellen.


quelle
(1) Der Magit-Verlaufspuffer unterstützt dies definitiv (obwohl ich mich nicht erinnere, wie). Benötigen Sie andere Mittel (z. B. in *magit-status*)? (2) Wenn Sie nur zur Basis zurückkehren möchten, verwenden Sie den vcNebenmodus C-x v u.
Lukstafi
1
Sprechen Sie über das Verwerfen nicht festgeschriebener Änderungen (dh das Zurücksetzen auf die aktuell festgeschriebene Version) oder das Zurücksetzen auf ein vorheriges Festschreiben? git checkout HEAD filewürde nicht festgeschriebene Änderungen verwerfen. git checkout HEAD^ filewürde auch Änderungen (falls vorhanden) zurücksetzen, die an der Datei im letzten Commit für das Repository vorgenommen wurden. Wenn dieses Commit die betreffende Datei nicht betraf, ^ist das effektiv redundant. Wenn Sie sich Ihre "Löschen und Ziehen" -Zusammenfassung ansehen, möchten Sie nur nicht festgeschriebene Änderungen verwerfen. In diesem Fall ist Rémis Antwort die gewünschte.
Phils

Antworten:

90

In Magit müssen Sie nur auf das Stück oder die Datei gehen, die Sie zurücksetzen möchten, und keine Änderung verwerfen. Weitere Informationen finden Sie in der entsprechenden Dokumentation unter https://magit.vc/manual/1.4/magit/Staging-and-Committing.html .

Rémi
quelle
1
Die Aktion hängt davon ab, wo Sie sie verwenden. Die Datei wird gelöscht, wenn die Datei nicht von git verfolgt wird. Wenn die Datei jedoch verfolgt wird, wird die Änderung verworfen. Beachten Sie, dass es schwierig ist, Ihre Datei vollständig aus dem Verlauf zu löschen, sobald sie sich in Git befindet.
Rémi
3
Ich denke, es kann durchaus auch umgekehrt verwendet werden, nachdem commit: Wenn Sie die Datei zusammen mit anderen Änderungen festgeschrieben haben, können Sie revertmit vund dann kdie inversen Änderungen, bei denen Sie die Änderungen beibehalten möchten.
Lukstafi
29

Bei geöffneter Datei können Sie M-x magit-file-checkout.

Razzi Abuissa
quelle
Welche Version von Emacs / Magit?
Dr. Jerry
1
Verfügbar seit Magit 2.3.0.
Razzi Abuissa
8
magit-checkout-fileist veraltet, verwenden Sie magit-file-checkoutstattdessen.
xged