Verstecken Sie Änderungen, während Sie die Änderungen im Arbeitsverzeichnis von Git beibehalten
144
Gibt es einen git stashBefehl, der Ihre Änderungen versteckt, sie aber auch im Arbeitsverzeichnis speichert? Also im Grunde ein git stash; git stash applyin einem Schritt?
@MariuszPawelski Nein, nicht wirklich. Diese Frage ist spezifischer als meine. Die Antwort auf meine Frage war einfach "nein". Vielen Dank für den Link, er kann für einige Leute oder sogar für mich zu einem späteren Zeitpunkt hilfreich sein.
Michael Dorst
Um klar zu sein, meine Frage ist anders, weil ich nicht verlangt habe, dass die Dateien unberührt bleiben. Ich habe nur nach Alternativen gesucht git stash && git stash apply. Sie werden feststellen, dass die Antworten auf diese Frage ganz anders sind als meine.
Michael Dorst
Ah, richtig, Ihre Frage ist etwas weniger spezifisch. Aber ich habe diese Frage gestellt, weil ihre Antworten auch Ihre Anforderungen erfüllen. Auf diese Weise wird diese Frage in der Seitenleiste als "Verknüpft" angezeigt, sodass sie für jemanden hilfreich sein kann.
Mariusz Pawelski
Antworten:
155
Eine andere Möglichkeit, dies zu tun, besteht darin, die Änderungen, die Sie beibehalten möchten, zu inszenieren und dann alles zu verstauen, indem Sie --keep-index:
Dies ist bei weitem die einfachste Erklärung für --keep-index, die ich gesehen habe. Ich habe nicht ganz verstanden, wie es in den Dokumenten formuliert war.
40 Detectives
52
git stashund dann git stash apply( git stash && git stash apply) werden Dateien gespeichert und sofort danach gespeichert. Immerhin haben Sie Ihre Änderungen im Stash und im Arbeitsverzeichnis.
Sie können einen Alias erstellen, wenn Sie ihn in einem Stück haben möchten. Setzen Sie einfach so etwas wie folgt ein ~/.gitconfig:
[alias]
sta = "!git stash && git stash apply"
Der Nachteil dieses Ansatzes besteht darin, dass alle Dateien gespeichert und neu erstellt werden. Dies bedeutet, dass Zeitstempel für die betreffenden Dateien geändert werden. (Emacs beschwert sich, wenn ich versuche, die Datei zu speichern, wenn sie vor dem Öffnen geöffnet wurde git sta, und kann zu unnötigen Neuerstellungen führen, wenn Sie sie verwenden makeoder Freunde.)
Wie kann ich diesen Alias für die Verwendung git stash savemit einem Argument ändern und dann tun git stash apply?
Spinningarrow
1
@ JaySidri, Bang bedeutet, dass es sich tatsächlich um einen externen Befehl handelt, nicht um ein Git-Argument. In den Dokumenten heißt es : "Wie Sie sehen können, ersetzt Git den neuen Befehl einfach durch einen beliebigen Alias. Möglicherweise möchten Sie jedoch einen externen Befehl anstelle eines Git-Unterbefehls ausführen. In diesem Fall starten Sie den Befehl mit einem ! Charakter. "
Madhead
10
Eine kleine Verbesserung der Antwort, die in der Praxis wahrscheinlich verwendet werden kann.
$ git add modified-file.txt
(OR $ git add . ---- for all modified file)
$ git stash save --keep-index "Your Comment"
HINWEIS: funktioniert nicht ohne "git add" (z. B. für geänderte, aber nicht zu Commit-Dateien hinzugefügte Dateien)
alex_1948511
4
Es gibt einen Trick, der Ihnen helfen kann, nicht etwas zu verstauen, sondern FWIW:
git add -A
git commit -m "this is what's called stashing" (create new stash commit)
git tag stash (mark the commit with 'stash' tag)
git reset HEAD~ (Now go back to where you've left with your working dir intact)
Und jetzt steht Ihnen ein mit Commit-Tags versehener Stash zur Verfügung. Es ist git stash popohnehin nicht möglich, einen zu erstellen, aber Sie können von dort aus Patches erstellen oder Dateien usw. zurücksetzen. Außerdem bleiben Ihre Arbeitsverzeichnisdateien übrigens intakt.
Beachten Sie, dass dies nicht tun alles , das git stash pushtut. Beispielsweise wird der Filialname nicht an das Commit angehängt, z stash@{0}: On myBranch: Stash commit message. B. " ".
Ich liebe dieses !! Eine Korrektur aber: man git-stashsagt der -m <message>kommen muss , bevor die Hash begehen. Außer, dass sich etwas am neuesten Git ändert.
git stash && git stash apply
. Sie werden feststellen, dass die Antworten auf diese Frage ganz anders sind als meine.Antworten:
Eine andere Möglichkeit, dies zu tun, besteht darin, die Änderungen, die Sie beibehalten möchten, zu inszenieren und dann alles zu verstauen, indem Sie
--keep-index
:Mit den obigen Befehlen wird alles gespeichert, die Dateien bleiben jedoch in Ihrem Arbeitsverzeichnis gespeichert.
Aus der offiziellen Linux Kernel Git-Dokumentation für
git stash
oder von git-scm :quelle
git stash
und danngit stash apply
(git stash && git stash apply
) werden Dateien gespeichert und sofort danach gespeichert. Immerhin haben Sie Ihre Änderungen im Stash und im Arbeitsverzeichnis.Sie können einen Alias erstellen, wenn Sie ihn in einem Stück haben möchten. Setzen Sie einfach so etwas wie folgt ein
~/.gitconfig
:Der Nachteil dieses Ansatzes besteht darin, dass alle Dateien gespeichert und neu erstellt werden. Dies bedeutet, dass Zeitstempel für die betreffenden Dateien geändert werden. (Emacs beschwert sich, wenn ich versuche, die Datei zu speichern, wenn sie vor dem Öffnen geöffnet wurde
git sta
, und kann zu unnötigen Neuerstellungen führen, wenn Sie sie verwendenmake
oder Freunde.)quelle
git stash; git stash apply
undgit stash && git stash apply
?&&
der zweite Befehl nur ausgeführt wird, wenn der erste den Statuscode Null zurückgegeben hat .git config --global alias.sta "!git stash && git stash apply"
sollte es tun.git stash save
mit einem Argument ändern und dann tungit stash apply
?Eine kleine Verbesserung der Antwort, die in der Praxis wahrscheinlich verwendet werden kann.
quelle
Es gibt einen Trick, der Ihnen helfen kann, nicht etwas zu verstauen, sondern FWIW:
Und jetzt steht Ihnen ein mit Commit-Tags versehener Stash zur Verfügung. Es ist
git stash pop
ohnehin nicht möglich, einen zu erstellen, aber Sie können von dort aus Patches erstellen oder Dateien usw. zurücksetzen. Außerdem bleiben Ihre Arbeitsverzeichnisdateien übrigens intakt.quelle
Sie können
git stash create
ein Stash-Commit erstellen und es dann im Stash speichern, indem Sie Folgendes verwendengit stash store
:Dies kann in einem Git-Alias gespeichert werden, um es bequemer zu machen:
Beachten Sie, dass dies nicht tun alles , das
git stash push
tut. Beispielsweise wird der Filialname nicht an das Commit angehängt, zstash@{0}: On myBranch: Stash commit message
. B. " ".quelle
man git-stash
sagt der-m <message>
kommen muss , bevor die Hash begehen. Außer, dass sich etwas am neuesten Git ändert.