Angenommen, in einem von git versionierten Projekt werden zwei Änderungen vorgenommen. Ein Set ist inszeniert und das andere nicht.
Ich möchte inszenierte Änderungen erneut überprüfen, indem ich mein Projekt in diesem Zustand ausführe (vor dem Festschreiben). Was ist ein einfacher Weg, um alle nicht bereitgestellten Änderungen zu beseitigen und nur inszeniert zu lassen? Ich brauche also nicht bereitgestellte Änderungen, um aus meinem Projekt zu verschwinden, aber um sie für weitere Arbeiten irgendwo zu speichern.
Das klingt sehr nach git stash
Befehl. Aber git stash
würde sowohl nicht inszenierte als auch inszenierte Änderungen von meinem Projekt entfernen. Und ich kann so etwas nicht finden git stash uncached
.
-k
Option) oder umständlich zu verwenden.Antworten:
Update 2:
Ich bin mir nicht sicher, warum sich die Leute über diese Antwort beschweren. Es scheint perfekt mit mir zu funktionieren. Für die nicht extrahierten Dateien können Sie das
-u
Flag hinzufügenDer vollständige Befehl wird
git stash --keep-index -u
Und hier ist ein Ausschnitt aus der
git-stash
HilfeUnd das ist ein GIF, wie es aussieht:
Aktualisieren:
Obwohl dies die ausgewählte Antwort ist, haben viele darauf hingewiesen, dass die [Antwort unten] (https://stackoverflow.com/a/34681302/292408) die richtige ist. Ich empfehle, sie zu überprüfen.Ich habe meine Antwort heute (31.1.2020) erneut gegen die Git-Version getestet
2.24.0
und glaube immer noch, dass sie korrekt ist. Ich habe oben einen kleinen Hinweis zu den nicht verfolgten Dateien hinzugefügt. Wenn Sie denken, dass es nicht funktioniert, erwähnen Sie bitte auch Ihre Git-Version.Alte Antwort :
Wenn die
--keep-index
Option verwendet wird, bleiben alle Änderungen, die bereits zum Index hinzugefügt wurden, erhalten:Aus der Dokumentation von
git-stash
:Wenn Sie jedoch nur die bereitgestellten Änderungen visuell überprüfen möchten, können Sie Folgendes versuchen
difftool
:quelle
git stash [-p|--patch]
was sich wie interaktives Verstauen anfühlt. Unterman git stash
"Mit --patch können Sie interaktiv Hunks aus dem Diff zwischen HEAD und dem zu verstauenden Arbeitsbaum auswählen."add -p
,checkout -p
undreset -p
nie versuchtstash -p
, danke für den Tipp: DIn der akzeptierten Antwort werden auch inszenierte Änderungen gespeichert, wie einige hervorgehoben haben, und nicht verfolgte Dateien werden nicht gespeichert. Hier ist eine Möglichkeit, dies zu tun, ohne die bereitgestellten Änderungen im Stash zu erhalten und gleichzeitig nicht verfolgte Dateien zu entfernen und zu verstauen.
Die Idee ist, ein vorübergehendes Festschreiben Ihrer bereitgestellten Änderungen durchzuführen, dann die nicht bereitgestellten Änderungen zu speichern und das temporäre Festschreiben aufzuheben:
Zu diesem Zeitpunkt haben Sie einen Vorrat Ihrer nicht bereitgestellten Änderungen und nur Ihre bereitgestellten Änderungen in Ihrer Arbeitskopie.
quelle
--keep-index
Option in der aktuellen akzeptierten Antwort stashes noch was im Index ist, ist es gerade auch hält es im Index. Dann wird es dupliziert und es kommt zu Heiterkeit.git add .
Schritt sollte möglicherweise verbessert werden,git add --all
da dadurch auch die Dateien in einem Verzeichnis über dem aktuellen Arbeitsverzeichnis abgerufen werden sollten.Ich fand, dass die markierte Antwort für mich nicht funktionierte, da ich etwas brauchte, das wirklich nur meine nicht inszenierten Änderungen versteckte. Die markierte Antwort enthält
git stash --keep-index
sowohl die inszenierten als auch die nicht inszenierten Änderungen. Der--keep-index
Teil lässt lediglich den Index auch auf der Arbeitskopie intakt. Das funktioniert für OP, aber nur, weil er eine etwas andere Frage gestellt hat, als er eigentlich wollte.Der einzig wahre Weg, nicht bereitgestellte Änderungen zu speichern, besteht darin, den Speicher überhaupt nicht zu verwenden:
git checkout -- .
wird auch statt funktionierenapply -R
.Arbeit Arbeit Arbeit...
quelle
git version 2.6.1.windows.1
,git stash -k
arbeitete wie beschrieben.Git: Verstecke nicht bereitgestellte Änderungen
Dadurch werden alle Änderungen gespeichert, die Sie nicht hinzugefügt haben:
Beachten Sie, dass neu erstellte (und nicht hinzugefügte) Dateien in Ihrem Arbeitsverzeichnis verbleiben, sofern Sie nicht auch den
-u
Schalter verwenden.Außerdem muss Ihr Arbeitsverzeichnis sauber sein (dh alle Änderungen müssen hinzugefügt werden), wenn Sie später Stash Pop aktivieren.
http://makandracards.com/makandra/853-git-stash-unstaged-changes
quelle
git stash --keep-index
. Bereitgestellte Dateien sind im Vorrat enthalten.