Für einzelne Dateien ist es viel einfacher, einzelne Dateien zu kopieren, als Stash-Befehle zu jonglieren, und wenn Sie sie zurückbringen möchten, kopieren Sie sie einfach über das Original. z.B. cp just_my_file.txt just_my_file.txt.manualstash Jetzt können Sie alle Kassen und Sachen erledigen und da die Kopie eine "nicht verfolgte Datei" ist, können Sie problemlos über Zweige und Commits wechseln. Wenn Sie sich in der richtigen Verzweigung / Festschreibung befinden, in der Sie "die einzelne Datei zusammenführen" möchten, tun mv just_my_file.txt.manualstash just_my_file.txtSie dies einfach und jetzt können Sie Änderungen überprüfen und bei Bedarf
Dimitry K
Antworten:
171
Ich denke, es stash -pist wahrscheinlich die Wahl, die Sie wollen, aber für den Fall, dass Sie in Zukunft auf andere, noch schwierigere Dinge stoßen, denken Sie daran:
Stashist wirklich nur eine sehr einfache Alternative zu den nur etwas komplexeren branchSets. Stash ist sehr nützlich, um Dinge schnell zu bewegen, aber Sie können komplexere Dinge mit Zweigen erledigen, ohne viel mehr Kopfschmerzen und Arbeit.
Gehen Sie herum und tun Sie, was Sie wollen, und später einfach rebaseund / oder mergedie tmpbranch. Es ist wirklich nicht so viel zusätzliche Arbeit, wenn Sie sorgfältiger nachverfolgen müssen, als es das Versteck zulässt.
Diese Antwort scheint die mir gerade nach vorne , wenn die Änderungen ändern: git stash -- filename.ext, git commit --amend, git stash pop
Brandon Dewey
1
Ich denke, dies muss auf einigen sehr neuen Funktionen beruhen. In Git 2.1.4 funktioniert es nicht.
Richard Smith
Es führt zu einem seltsamen Verhalten für mich, bei dem der Stash gespeichert wird, aber gleichzeitig dieselben Dateien zum Staging hinzugefügt werden (git v2.20.1)
paradroid
58
Sie können einzelne Zeilen interaktiv mit git stash -p(analog zu git add -p) verstauen .
Es wird kein Dateiname benötigt, aber Sie können einfach andere Dateien mit überspringen, dbis Sie die Datei erreicht haben, die Sie speichern möchten, und alle Änderungen dort mit speichern a.
Dies dauert lange, wenn Sie viele Dateien haben, die Sie nicht speichern möchten.
JJJ
23
Ich weiß nicht, wann sich dies geändert hat, aber ab jetzt git 2.14.1können Sie den Dateinamen angebengit stash -p <filename>
Myon
21
Die beste Option ist, alles außer dieser Datei zu inszenieren git stash save --keep-indexund stash anzuweisen , den Index beizubehalten, um so Ihre nicht bereitgestellte Datei zu verstauen:
Wie Dan betont, thefiletostashist es das einzige, das vom Stash zurückgesetzt wird, aber es versteckt auch die anderen Dateien, so dass es nicht genau das ist, was Sie wollen.
Obwohl dies den Index im gleichen Zustand hält, werden dadurch nicht auch die Dateien im Index gespeichert? Mit anderen Worten, wenn Sie danach den Index für den aktuellen Zweig festschreiben, dann zu einem anderen Zweig wechseln und dies tun git stash pop, werden dann nicht alle Dateien angewendet, nicht nur die eine Datei, die wir speichern wollten?
Dan Moulding
@ DanMoulding: Du hast absolut Recht, darüber habe ich nicht nachgedacht.
CharlesB
16
Nur für den Fall, dass Sie tatsächlich "Änderungen verwerfen" meinen, wenn Sie "Git Stash" verwenden (und nicht wirklich Git Stash verwenden, um es vorübergehend zu speichern), können Sie in diesem Fall verwenden
git checkout -- <file>
Beachten Sie, dass Git Stash nur eine schnellere und einfachere Alternative zum Verzweigen und Ausführen von Dingen ist.
Ich denke, dies ist die beste Antwort, wenn Sie alle Ihre geänderten Änderungen an einer einzelnen Datei entfernen möchten.
Mohamed Haseel
und ich würde, dies ist die beste Antwort für diese spezielle Aufgabe
Zakir Hussain
6
Die Frage war klar genug und es wurde nicht gefragt, wie Änderungen an einer Datei rückgängig gemacht werden sollen. Abgestimmt.
Richard Smith
Dies ist eine gute Antwort, die als Alternative klar erkennbar ist. Aber einige Leute werden hartnäckig genug sein, um Downvote als missbräuchliche Funktion zu verwenden: +1
Mukul Jain
@MukulJain Ich musste den Stash-per-File tatsächlich nur vorübergehend verwenden (im Grunde genommen wurden einige Änderungen in zwei Commits, die dieselben Zeilen betrafen, für eine Datei getrennt). Ich werde nicht wirklich abstimmen, sondern nur sagen, dass es für mich nutzlos ist.
cp just_my_file.txt just_my_file.txt.manualstash
Jetzt können Sie alle Kassen und Sachen erledigen und da die Kopie eine "nicht verfolgte Datei" ist, können Sie problemlos über Zweige und Commits wechseln. Wenn Sie sich in der richtigen Verzweigung / Festschreibung befinden, in der Sie "die einzelne Datei zusammenführen" möchten, tunmv just_my_file.txt.manualstash just_my_file.txt
Sie dies einfach und jetzt können Sie Änderungen überprüfen und bei BedarfAntworten:
Ich denke, es
stash -p
ist wahrscheinlich die Wahl, die Sie wollen, aber für den Fall, dass Sie in Zukunft auf andere, noch schwierigere Dinge stoßen, denken Sie daran:Stash
ist wirklich nur eine sehr einfache Alternative zu den nur etwas komplexerenbranch
Sets. Stash ist sehr nützlich, um Dinge schnell zu bewegen, aber Sie können komplexere Dinge mit Zweigen erledigen, ohne viel mehr Kopfschmerzen und Arbeit.Gehen Sie herum und tun Sie, was Sie wollen, und später einfach
rebase
und / odermerge
die tmpbranch. Es ist wirklich nicht so viel zusätzliche Arbeit, wenn Sie sorgfältiger nachverfolgen müssen, als es das Versteck zulässt.quelle
Wenn Sie keine Nachricht mit Ihren versteckten Änderungen angeben möchten, übergeben Sie den Dateinamen nach einem Doppelstrich.
Wenn es sich um eine nicht verfolgte / neue Datei handelt, müssen Sie sie zuerst bereitstellen.
Wenn Sie jedoch eine Nachricht angeben möchten, verwenden Sie
push
.Beide Methoden funktionieren in Git-Versionen 2.13+
quelle
git stash -- filename.ext
,git commit --amend
,git stash pop
Sie können einzelne Zeilen interaktiv mit
git stash -p
(analog zugit add -p
) verstauen .Es wird kein Dateiname benötigt, aber Sie können einfach andere Dateien mit überspringen, dbis Sie die Datei erreicht haben, die Sie speichern möchten, und alle Änderungen dort mit speichern a.
quelle
git 2.14.1
können Sie den Dateinamen angebengit stash -p <filename>
Die beste Option ist, alles außer dieser Datei zu inszenieren
git stash save --keep-index
und stash anzuweisen , den Index beizubehalten, um so Ihre nicht bereitgestellte Datei zu verstauen:Wie Dan betont,
thefiletostash
ist es das einzige, das vom Stash zurückgesetzt wird, aber es versteckt auch die anderen Dateien, so dass es nicht genau das ist, was Sie wollen.quelle
git stash pop
, werden dann nicht alle Dateien angewendet, nicht nur die eine Datei, die wir speichern wollten?Nur für den Fall, dass Sie tatsächlich "Änderungen verwerfen" meinen, wenn Sie "Git Stash" verwenden (und nicht wirklich Git Stash verwenden, um es vorübergehend zu speichern), können Sie in diesem Fall verwenden
Beachten Sie, dass Git Stash nur eine schnellere und einfachere Alternative zum Verzweigen und Ausführen von Dingen ist.
quelle