Wie kann ich Dateiänderungen aus dem Statusfenster von Flüchtlingen verwerfen?


33

Wenn Sie im Statusfenster von fugitive-plugin auf using zugreifen, können Sie Änderungen für eine Datei mithilfe von diff und Dateien für das Festschreiben mithilfe von umschalten .:GstatusD-

Gibt es eine ähnliche Abkürzung für das Verwerfen von Änderungen, mit dem Verwerfen meine ich das Äquivalent von git checkout -- filename?

Aktualisieren:

Es wurde eine Funktionsanforderung auf der Seite " Flüchtiger Github" gefunden. Problem Nr. 97: Verknüpfung zum Auschecken / Entfernen von Dateien

Der bevorzugte Weg ist demnach die Verwendung :Gread :w

Update 2:

Seit Juni 2014 ist es möglich, Uwie unten von Anson beantwortet .

Update 3: Seit dem 3. Januar 2019 ist die Tastaturbelegung zugeordnetX

Antworten:


27

Diese Funktionalität wurde im Juni 2014 hinzugefügt und ist standardmäßig zugeordnet U.

Diese Information befindet sich in der Hilfedatei unter :h :Gstatus:

     U     |:Git| checkout HEAD

Feature-Anfrage und Diskussion:
https://github.com/tpope/vim-fugitive/issues/97

Festschreiben:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63


Wenn dies nicht dokumentiert ist, kann es als unsicher angesehen werden. Wäre es nicht schwierig herauszufinden, ob Sie Ihre lokalen Änderungen aufgrund eines undokumentierten magischen Tastenanschlags blockiert haben?
sehe

2
2019 Jetzt X
aktualisieren

jemand mit Bearbeitungsberechtigung, bitte bearbeiten Sie es zu X?
Chris

15

Sie können den Befehl fugitive verwenden , Greadum den Inhalt eines Puffers durch verschiedene alternative Versionen der Pufferdatei zu ersetzen (dh dies muss aus dem :GstatusPuffer einer Datei erfolgen, nicht aus dem Puffer).

  • :Gread(ohne Argument) verwendet die Version der Datei aus dem Index .
  • :Gread - Verwendet die Version der Datei aus dem HEAD-Commit.

In der Dokumentation unter finden Sie :help fugitive-revisioneine Liste anderer Versionsspezifikationen, die von fugitive unterstützt werden (die beiden oben genannten sind wahrscheinlich die am schnellsten nützlichen).

Der :GreadWorkflow läuft wie folgt ab:

  1. :Gread
  2. fugitive löscht den aktuellen Puffer und liest den Inhalt aus dem Index ein
  3. Ergebnis : Der Puffer hat jetzt den gleichen Inhalt wie der Index. Die Arbeitsbaumdatei wird nicht geändert.
  4. Anschließend können Sie :wdie Datei im Arbeitsbaum speichern (oder verwenden, :Gread|wwenn Sie wissen, dass Sie sie sofort speichern möchten).

Der :Git checkout -- %Workflow läuft wie folgt ab:

  1. :Git checkout -- %
  2. Git kopiert die Version der Datei im Index in die Datei im Arbeitsbaum.
  3. Vim bemerkt, dass die Datei außerhalb des Editors geändert wurde und fordert Sie auf, sie zu ignorieren oder neu zu laden.
  4. Sie weisen Vim an, die Datei neu zu laden.
  5. Ergebnis : Sowohl die Arbeitsbaumdatei als auch der Puffer haben jetzt den Inhalt aus dem Index.

Zusammenfassung: Es wird :Greadvermieden, dass die Eingabeaufforderung "Datei wurde seit Beginn der Bearbeitung geändert" angezeigt wird, und Sie können entscheiden, wann Sie die Datei im Arbeitsbaum ändern möchten.


Wenn der Puffer eine Indexstufe der Datei anstelle der Datei aus dem Arbeitsbaum darstellt, wird :Greadanstelle von Stufe 0 des Index aus dem Inhalt der Datei gelesen, wie er auf der Festplatte im Arbeitsbaum vorhanden ist.


Zuordnung für gstatus zum Zurücksetzen der Datei:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
Majkinetor

1

Zuordnung für gstatus zum Zurücksetzen der Datei:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>

Das funktioniert prima, nur der Nachteil ist, dass ich den Dialog bekomme, dass sich die Datei auf der Festplatte geändert hat und wenn ich sie neu laden möchte. Wäre schön, wenn es still wäre.
Tidbeck

1
Das ist sogar noch besser, wenn Sie die Bestätigung erhalten, dass die Datei tatsächlich zurückgesetzt wurde. Das automatische stille Neuladen kann jedoch mit der Option 'autoread' ( :help autoread) erfolgen. Andere als die, die du bufdo eoben drinnen haben könntest au.
Majkinetor

0

Na, hast du es versucht :help fugitive?

Anscheinend gibt es keine Abkürzung für diese Git-Funktion.


Ja, habe ich. Es gab Zeiten, in denen ich keine Funktion in der Hilfe gefunden habe, die dennoch vorhanden war. Ist Ihre Meinung, dass Sie niemals nach einer Funktion fragen sollten, die nicht in der Hilfe zum Programm / Plugin enthalten ist?
Tidbeck

Ja, es ist mir auch passiert: Es gab eine Funktion, die ich konnte, der :callaber kein Befehl zugeordnet war. Ich erinnere mich nicht an den Namen des Plugins ... Ausrichten? Was auch immer, ich bin der Meinung, dass man die Dokumente lesen sollte, bevor man herum fragt. Was du getan hast. Also das ist cool. Aber der logische zweite Schritt, nach dem Lesen der Dokumente, wäre IMO, nach der Quelle des Plugins zu suchen und zu sehen, ob es dort eine nützliche Funktion gibt. Was du tun solltest. Aber, AFAIK, der Flüchtling hat überhaupt nichts damit zu tun, git checkoutalso sind Ihre Chancen gering. Sie müssen wahrscheinlich zurückgreifen :!git checkout -- filename.
Romainl

Ok, danke für die Klarstellung. Ich denke, Sie machen einen gültigen Punkt in Bezug auf einen Blick auf den Quellcode, aber zur gleichen Zeit, wenn die Informationen nur im Quellcode verfügbar sind, könnte es hier eine gültige Qualitätssicherung sein. Akzeptiert Ihre Antwort und verwendet sie weiter :Git checkout -- %.
Tidbeck

0

Obwohl es nichts mit vim zu tun hat, dachte ich daran, dir zu sagen, dass ich manchmal tue:

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

Beenden Sie den Job schnell.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.