Ich möchte den folgenden Arbeitsablauf ausführen:
- Fügen Sie der Bühne Änderungen hinzu.
- Bewahren Sie alle anderen Änderungen auf, die nicht bereitgestellt wurden.
- Mach ein paar Sachen mit den Dingen in der Phase (zB bauen, Tests ausführen usw.)
- Wenden Sie den Vorrat an.
Gibt es eine Möglichkeit, Schritt 2 auszuführen?
Beispiel
echo "123" > foo
git add foo # Assumes this is a git directory
echo "456" >> foo
git stash
cat foo # Should yield 123
man git stash
ist viel besser.Antworten:
git stash save
hat eine Option--keep-index
, die genau das tut, was Sie brauchen.Also renn
git stash save --keep-index
.quelle
save
mitgit stash
. Vielleicht ist es der Programmierer in mir, der darauf besteht, die Symmetrie mit apply / pop zu respektieren. :)git stash save
ist, dass die bereits bereitgestellten Änderungen auch in Ihrer Arbeitskopie verbleiben. Im obigen Workflow würde dies gut funktionieren, da Sie den Stash nur auf eine lokale Kopie anwenden, die bereits die Hälfte der Änderungen des Stash enthält (welcher Git klug genug ist, um ihn zu ignorieren). Wenn Sie den Code jedoch bearbeiten, bevor Sie den Stash erneut anwenden, können beim Zusammenführen möglicherweise Zusammenführungskonflikte auftreten. Fyi.git commit --ammend
wenn es Probleme mit dem gibt, was ich begangen habe.--amend
(anstatt--ammend
)Dies kann in drei Schritten erfolgen: Speichern von bereitgestellten Änderungen, Speichern aller anderen Elemente, Wiederherstellen des Index mit bereitgestellten Änderungen. Welches ist im Grunde:
Dies wird genau das tun, was Sie wollen.
quelle
-u
Versteckt auch nicht verfolgte Dateien.git stash save --keep-index
mit viel mehr Arbeit verbunden ist. Ich sehe keine Vorteile.Auch Re:
A: Weil Sie immer getesteten Code einchecken sollten :) Das bedeutet, dass Sie die Tests nur mit den Änderungen ausführen müssen, die Sie festschreiben möchten
Abgesehen von der Tatsache, dass Sie als erfahrener Programmierer natürlich den angeborenen Drang haben, nur diese Änderungen zu testen und zu überprüfen - nur teilweise ein Scherz
quelle
Mit
git version 2.7.4
dir darfst du:Das
git
fragen Sie Ihre Änderungen in Stash hinzuzufügen , oder nicht.Und du antwortest dann einfach
y
odern
Sie können das Arbeitsverzeichnis wie immer wiederherstellen:
oder, wenn Sie gespeicherte Änderungen im Vorrat behalten möchten:
quelle
Wenn ich frühere Antworten erweitere, habe ich manchmal eine komplexe Reihe von Änderungen, möchte aber zuerst eine separate Änderung vornehmen. Beispielsweise habe ich möglicherweise einen Fehler oder einen anderen falschen Code entdeckt, den ich vor meinen bereitgestellten Änderungen beheben möchte. Ein möglicher Weg ist folgender:
Verstecke zuerst alles, aber lass die inszenierten Änderungen intakt
Verstecken Sie jetzt die inszenierten Änderungen auch separat
Änderungen zur Behebung vornehmen; und testen; verpflichten sie:
Stellen Sie nun die zuvor bereitgestellten Änderungen wieder her:
Lösen Sie alle Konflikte und beachten Sie, dass git bei Konflikten diesen Top-Stash-Eintrag angewendet, aber nicht gelöscht hat.
(... Übernehmen Sie dann die bereitgestellten Änderungen, stellen Sie den Vorrat aller anderen Änderungen wieder her und fahren Sie fort ...)
quelle
Führen Sie den folgenden Befehl aus, um die nicht getaggten (nicht zum Festschreiben hinzugefügten) Dateien zum Stash hinzuzufügen:
Dann können Sie die bereitgestellten Dateien festschreiben. Danach können Sie die zuletzt gespeicherten Dateien mit dem folgenden Befehl zurückholen:
quelle
Es ist schwieriger, nur den Arbeitsbaum (nicht bereitgestellte Änderungen) in Git zu verstecken, als es sein sollte. Die akzeptierte Antwort stashes die unstaged Veränderungen, aber auch die stashes inszeniert Veränderungen (und Blätter sie als gut inszeniert), was selten ist , was Sie wollen.
Dieser Alias funktioniert gut:
Es schreibt die bereitgestellten Änderungen vorübergehend fest, erstellt einen Stash aus den verbleibenden Änderungen (und ermöglicht die Übergabe zusätzlicher Argumente wie
--include-untracked
und--message
als Alias-Argumente) und setzt dann das temporäre Festschreiben zurück, um die bereitgestellten Änderungen zurückzugewinnen.Es ähnelt der Antwort von @Simon Knapp, weist jedoch einige geringfügige Unterschiede auf: Es verwendet
--quiet
die temporären Aktionen, akzeptiert eine beliebige Anzahl von Parametern für den Stashpush
, anstatt den Code fest zu codieren-m
, und fügt hinzu--soft
zum Finale bei Zurücksetzen, damit der Index beim Start erhalten bleibt.Für das entgegengesetzte Problem, nur die inszenierten Änderungen (Alias
stash-index
) zu verstecken, siehe diese Antwort .quelle
Ein weiterer Tipp im Zusammenhang mit der Frage:
Wenn Sie Ihre nicht bereitgestellten Änderungen effektiv mit speichern
Möglicherweise möchten Sie dem Stash eine Nachricht geben, damit bei der Ausführung eines
git stash list
Vorgangs klarer wird, was Sie zuvor gespeichert haben, insbesondere, wenn Sie diesem Stash-Vorgang weitere Speicherungen folgen. Beispielsweise(obwohl es tatsächlich alle Änderungen enthält, wie in anderen Antworten angegeben).
Zum Beispiel könnte auf das oben Gesagte sofort folgen:
Beachten Sie jedoch, dass Sie dann nicht verwenden können
um nur die nicht bereitgestellten Änderungen wiederherzustellen.
quelle
Git hat keinen Befehl, der nur Ihre nicht bereitgestellten Änderungen versteckt.
Mit Git können Sie jedoch angeben, welche Dateien Sie speichern möchten.
Wenn Sie nur bestimmte Änderungen in diesen Dateien speichern möchten, fügen Sie die
--patch
Option hinzu.Mit dieser
--include-untracked
Option können Sie nicht verfolgte Dateien speichern.Führen Sie
git help stash
(oderman git-stash
) aus, um weitere Informationen zu erhalten.Hinweis: Wenn Ihre nicht bereitgestellten Änderungen eher disoganisiert sind, ist die Antwort von @ alesguzik wahrscheinlich einfacher.
quelle
Die moderne Form dieses Befehls ist
git stash push [--] [<pathspec>...]
, da Git 2.16+ (git stash save
veraltet )Sie können dies mit einem Platzhalterformular kombinieren, zum Beispiel:
Aber das funktioniert nicht gut mit Git für Windows, bis Git 2.22 (Q2 2019), siehe Ausgabe 2037 , wenn man bedenkt, dass
git stash
es in C neu implementiert wurde (anstelle eines Shell-Skripts).Siehe Commit 7db9302 (11. März 2019) von Thomas Gummerer (
tgummerer
) .Siehe Commit 1366c78 , Commit 7b556aa (07. März 2019) von Johannes Schindelin (
dscho
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 0ba1ba4 , 22. April 2019)quelle
Ich verwende einen Alias, der eine Zeichenfolge akzeptiert, die als Nachricht an den Stash-Eintrag verwendet werden soll.
Welche:
-u
oder-a
),--soft
, um es im Index zu behalten).quelle