Wie benenne und rufe ich einen Git-Stash nach Namen ab?

Lesezeit: 10 Minuten

Benutzer-Avatar
Suan

Wie speichere/wende ich einen Vorrat mit einem Namen an? Ich möchte seine Indexnummer nicht nachschlagen müssen git stash list. Ich habe es versucht git stash save "my_stash_name"aber das ändert nur die Stash-Beschreibung und die entsprechende git apply "my_stash_name" funktioniert nicht.

  • git stash push -m stashname ist der aktuelle Syntax. git stash save stashname ist veraltet.

    – SherylHohman

    25. April 2018 um 18:08 Uhr


  • Einfacher benutzerdefinierter Git-Befehl (Link zum Kern). Verwendungszweck: git bottle name und dann später git apply name.patchsiehe meine Antwort, wenn Sie eine ausführlichere Erklärung und Verwendungsbeispiele wünschen.

    – Graufuchs

    31. August 2021 um 12:17 Uhr


  • Komisch, dass die meisten Antworten scheinbar nichts mit der Frage zu tun haben. Camerons Antwort ist am nächsten, da sie eine Umgehung mit einer detaillierten Erklärung bietet, warum sie funktioniert. Die Antwort auf die Frage lautet jedoch offensichtlich nein. Sie können nicht tun, was das OP verlangt, aber es gibt eine Problemumgehung, mit der Sie einen Stash mithilfe seines beschreibenden Kommentars anwenden können. Das ist wahrscheinlich der Grund, warum keine Antwort als Antwort akzeptiert wurde oder das OP einfach vergessen hat, eine auszuwählen. Es war eine gute Frage, die ich zu schätzen wusste, da ich gerade nach der Antwort gesucht hatte, als ich diese fand.

    – shawn1874

    17. März um 1:48

Benutzer-Avatar
Sri Murthy Upadhyayula

Zu sparen ein Versteck mit einer Nachricht:

git stash push -m "my_stash_name"

Zu aufführen Verstecke:

git stash list

Alle Verstecke werden in einem Stapel gespeichert.


Zu anwenden und entfernen das nter Vorrat:

git stash pop [email protected]{n}

Zu anwenden und entfernen ein Versteck mit Namen:

git stash pop stash^{/my_stash_name}

Zu anwenden das nter Vorrat:

git stash apply [email protected]{n}

Zu anwenden ein Versteck mit Namen:

git stash apply stash^{/my_stash_name}

  • OP versucht ausdrücklich, die umständlich benannten [email protected]{n}-Namen für benutzerdefinierte Namen zu vermeiden. git stash apply <custom-name>

    – EintopfSquared

    13. Januar 2017 um 21:13 Uhr


  • git stash push -m my_stash ist der aktuelle Syntax. git stash save my_stash ist veraltet.

    – SherylHohman

    25. April 2018 um 18:11 Uhr


  • das ist verwirrend. Nur @AdamB hat die Frage beantwortet

    – Kiedysktos

    24. Oktober 2019 um 13:12 Uhr

  • Wenn Sie Windows Power-Shell verwenden, kann Stash Apply einen Fehler auslösen. Halten Sie es also in Anführungszeichen. git stash apply "[email protected]{n}"

    – Naveen

    21. August 2020 um 1:58 Uhr


  • Ich habe ein Stash mit erstellt git stash push -m my_stash tat es dann git stash apply my_stash und es gab einen Fehler. git stash apply stash^{/my_stash} hat die Arbeit gemacht. Habe diese von einer anderen Antwort von @Cameron McKenzie.

    – Abinash Dash

    23. September 2021 um 8:49 Uhr


Benutzer-Avatar
EssaidiM

git stash save ist veraltet ab 2.15.x/2.16, stattdessen können Sie verwenden git stash push -m "message"

Sie können es wie folgt verwenden:

git stash push -m "message"

wobei “Nachricht” Ihre Notiz für diesen Vorrat ist.

Um den Stash abzurufen, können Sie Folgendes verwenden: git stash list. Dadurch wird eine Liste wie diese ausgegeben, zum Beispiel:

[email protected]{0}: On develop: perf-spike
[email protected]{1}: On develop: node v10

Dann verwenden Sie einfach apply gibt es die [email protected]{index}:

git stash apply 1

Verweise
git stash Manpage

  • Dokumente angezeigt push statt save Syntax: Git-Stash-Push

    – SherylHohman

    25. April 2018 um 18:04 Uhr

  • Dies ist die wahre Antwort. Leider gibt es eine Menge alter Antworten darüber.

    – mas

    12. Dezember 2018 um 19:37 Uhr

  • Für mehr auf dem neueren git stash push: stackoverflow.com/a/47231547/6309

    – VonC

    28. Januar 2019 um 15:03 Uhr

  • FWIW: Beim Laufengit stash apply [email protected]{1} In Powershell erhalten Sie a error: unknown switch 'e' der Rücken. Verwenden Sie stattdessen git stash apply --index 1 oder git stash apply '[email protected]{1}' oder entkommen } und { mit einem Backtick `.

    – LosManos

    26. Mai 2020 um 6:59 Uhr


  • Warum wählt Git einen umständlichen Namensstil wie [email protected]{1}? Dies ist wirklich schwer in der Befehlszeile einzugeben. Wenn wir so etwas eingeben können git stash show -p @1 wäre viel einfacher…

    – nullx

    10. August 2020 um 6:49 Uhr

Benutzer-Avatar
Pat Niemeyer

Wenn Sie nur nach einer einfachen Möglichkeit suchen, einige oder alle Ihrer aktuellen Änderungen an der Arbeitskopie zu speichern und sie später nach Belieben erneut anzuwenden, sollten Sie eine Patch-Datei in Betracht ziehen:

# save your working copy changes
git diff > some.patch

# re-apply it later
git apply some.patch

Hin und wieder frage ich mich, ob ich dafür Verstecke verwenden sollte, und dann sehe ich Dinge wie den Wahnsinn oben und bin zufrieden mit dem, was ich tue 🙂

  • Das ist es! Vielen Dank. Ich habe auch meine .gitignore aktualisiert, um .patch-Dateien zu ignorieren, und ich bin bereit, so viele Patches zu haben, wie ich möchte.

    – LINGS

    24. Juni 2019 um 14:27 Uhr

  • Ich kann die Absicht hinter der Frage erkennen, die darin besteht, jedes Mal, wenn Sie einen Zweig aus dem Master herausnehmen, einige lokale Änderungen anzuwenden und sie nicht festzuschreiben. Vielleicht hätte die Frage also korrigiert und diese Antwort als Lösung akzeptiert werden sollen. Einfach auch.

    – Karthick Meenakshi Sundaram

    18. Februar 2020 um 10:13 Uhr


  • Schöne Alternative zu Stash

    – isapir

    20. August 2020 um 18:06 Uhr

  • Ich denke, wir möchten diese Antwort vielleicht mit a erweitern git apply --3way some.patch. Dies ähnelt eher dem traditionellen git stash apply sich nähern. Andernfalls können Konflikte dazu führen, dass die Anwendung des Patches fehlschlägt

    – Vance Palacio

    13. November 2020 um 20:46 Uhr


  • Ich glaube nicht, dass dies neue Dateien macht.

    – James Emanon

    18. Mai 2021 um 5:33 Uhr

Benutzer-Avatar
Adam Dymitruk

Du kannst einen Stash in einen Branch verwandeln, wenn du es für wichtig genug hältst:

git stash branch <branchname> [<stash>]

aus der Manpage:

Dadurch wird ein neuer Zweig mit dem Namen erstellt und ausgecheckt <branchname> ab dem Commit, bei dem die <stash> ursprünglich erstellt wurde, wendet die darin aufgezeichneten Änderungen an <stash> in den neuen Arbeitsbaum und Index und löscht dann die <stash> wenn das erfolgreich abgeschlossen wird. Wenn nein <stash> gegeben ist, gilt die neueste.

Dies ist nützlich, wenn der Zweig, auf dem Sie liefen git stash save hat sich so weit geändert, dass die Anwendung von git stash aufgrund von Konflikten fehlschlägt. Da der Stash auf den Commit angewendet wird, der zum Zeitpunkt der Ausführung von git stash HEAD war, stellt er den ursprünglich gestashten Zustand ohne Konflikte wieder her.

Sie können diesen neuen Zweig später an einen anderen Ort umbasieren, der ein Nachkomme dessen ist, wo Sie sich befanden, als Sie gestasht haben.

Benutzer-Avatar
iWheelBuy

Ich habe diese beiden Funktionen in meinem .zshrc Datei:

function gitstash() {
    git stash push -m "zsh_stash_name_$1"
}

function gitstashapply() {
    git stash apply $(git stash list | grep "zsh_stash_name_$1" | cut -d: -f1)
}

Verwenden Sie sie auf diese Weise:

gitstash nice
gitstashapply nice

  • Was ist “zsh_stash_name_”?

    – Sam Hasler

    5. Dezember 2019 um 11:07 Uhr

  • @SamHasler nur eine zufällige eindeutige Zeichenfolge. Falls Sie wissen möchten, dass der Stash mit regulärem Git-Stash oder mit diesen Funktionen erstellt wurde

    – iWheelBuy

    9. Januar 2020 um 11:11 Uhr

  • Elegante Lösung für Alias-Fans

    – bigbiggerpepe

    21. März 2020 um 9:20 Uhr

  • Diese sind großartig! FWIW, Sie können diese direkt in .gitconfig werfen: stashput = "!f() { git stash push -m "stash_name_$1"; }; f". stashget = "!f() { git stash apply $(git stash list | grep 'stash_name_$1' | cut -d: -f1); }; f". Dann in deiner sh-Konfiguration (zB .bashrc oder .bash_aliases). ## git stash by name. alias gsp="git stashput " alias gsg="git stashget ". Jetzt können Sie es auf der CLI wie folgt verwenden: prompt# gsp localchanges. prompt# gsg localchanges.

    – dyodji

    16. November 2020 um 18:16 Uhr


  • Ich würde es tun grep -m 1 "zsh_stash_name_$1" Nur damit es das erste Ergebnis zurückgibt, wenn derselbe Name mehrmals verwendet wurde: stackoverflow.com/a/5013198/4984618

    – pgarciacamou

    24. März um 0:22


Benutzer-Avatar
Michael

Ich bin mir also nicht sicher, warum es zu diesem Thema so viel Bestürzung gibt. ich kann nennen Sie ein git stash mit beiden a push und die Verworfenen saveund ich kann eine Regex verwenden, um es mit einem zurückzuziehen apply:

Git-Stash-Methode zur Verwendung eines anzuwendenden Namens

$ git stash push -m "john-hancock"

$ git stash apply stash^{/john-hancock}

Wie bereits erwähnt, die save Der Befehl ist veraltet, funktioniert aber immer noch, sodass Sie ihn auf älteren Systemen verwenden können, auf denen Sie sie nicht mit a aktualisieren können push Anruf. im Gegensatz zu den push Befehl, der -m Schalter ist nicht erforderlich mit save.

// save is deprecated but still functional  
$ git stash save john-hancock

Dies ist Git 2.2 und Windows 10.

Visueller Beweis

Hier ist ein wunderschönes animiertes GIF, das den Prozess demonstriert.

Animiertes GIF, das eine Git-Stashanwendung mit einem identifizierbaren Namen zeigt.

Abfolge der Ereignisse

Das GIF wird schnell ausgeführt, aber wenn Sie sich das ansehen, ist der Prozess folgender:

  1. Das ls Befehl zeigt 4 Dateien im Verzeichnis
  2. touch example.html fügt eine fünfte Datei hinzu
  3. git stash push -m "john-hancock" -a (Das -a enthält nicht getrackte Dateien)
  4. Das ls Der Befehl zeigt 4 Dateien nach dem Stash an, was bedeutet, dass der Stash und der implizite Hard-Reset funktioniert haben
  5. git stash apply stash^{/john-hancock} läuft
  6. Das ls Befehl listet 5 Dateien auf und zeigt die beispiel.html Datei wurde zurückgebracht, was bedeutet, dass die git stash apply Befehl hat funktioniert.

Ist das überhaupt sinnvoll?

Um ehrlich zu sein, bin ich mir jedoch nicht sicher, was der Vorteil dieses Ansatzes ist. Es ist sinnvoll, dem Stash einen Namen zu geben, aber nicht dem Abruf. Vielleicht um das zu scripten Regal und unregal zu verarbeiten, wäre hilfreich, aber es ist immer noch viel einfacher, ein Stash einfach nach Namen zu öffnen.

$ git stash pop 3
$ git stash apply 3

Das sieht für mich viel einfacher aus als die Regex.

  • Was ist “zsh_stash_name_”?

    – Sam Hasler

    5. Dezember 2019 um 11:07 Uhr

  • @SamHasler nur eine zufällige eindeutige Zeichenfolge. Falls Sie wissen möchten, dass der Stash mit regulärem Git-Stash oder mit diesen Funktionen erstellt wurde

    – iWheelBuy

    9. Januar 2020 um 11:11 Uhr

  • Elegante Lösung für Alias-Fans

    – bigbiggerpepe

    21. März 2020 um 9:20 Uhr

  • Diese sind großartig! FWIW, Sie können diese direkt in .gitconfig werfen: stashput = "!f() { git stash push -m "stash_name_$1"; }; f". stashget = "!f() { git stash apply $(git stash list | grep 'stash_name_$1' | cut -d: -f1); }; f". Dann in deiner sh-Konfiguration (zB .bashrc oder .bash_aliases). ## git stash by name. alias gsp="git stashput " alias gsg="git stashget ". Jetzt können Sie es auf der CLI wie folgt verwenden: prompt# gsp localchanges. prompt# gsg localchanges.

    – dyodji

    16. November 2020 um 18:16 Uhr


  • Ich würde es tun grep -m 1 "zsh_stash_name_$1" Nur damit es das erste Ergebnis zurückgibt, wenn derselbe Name mehrmals verwendet wurde: stackoverflow.com/a/5013198/4984618

    – pgarciacamou

    24. März um 0:22


Benutzer-Avatar
Lili Ballard

Verstecke sind nicht dazu gedacht, dauerhafte Dinge zu sein, wie Sie es möchten. Sie wären wahrscheinlich besser bedient, wenn Sie Tags für Commits verwenden. Konstruieren Sie das Ding, das Sie verstauen möchten. Machen Sie ein Commit daraus. Erstellen Sie ein Tag für diesen Commit. Setzen Sie dann Ihren Zweig zurück auf HEAD^. Wenn Sie diesen Vorrat jetzt erneut anwenden möchten, können Sie ihn verwenden git cherry-pick -n tagname (-n ist --no-commit).

  • Definitiv wie dieser Ansatz, fühlt sich ein bisschen sauberer an, nur einen zu haben named commit irgendwo abhängen. Das einzige leichte Ärgernis ist, dass es beim Cherry-Pick nicht festgeschrieben wird und im Diff bleibt, was bedeutet, dass es beim nächsten Festschreiben manuell nicht eingecheckt werden muss.

    – Aditya MP

    15. Dezember 2016 um 3:50 Uhr

  • Das ist am nächsten. Ich denke, ich werde ein paar Aliase dafür machen. Ich mag es nicht, die Beschreibung als “Name” zu verwenden.

    – EintopfSquared

    13. Januar 2017 um 21:17 Uhr

  • Schade, dass es zum Index hinzugefügt wird und Sie zurücksetzen müssen, jemand sollte einen patchen --no-stage Möglichkeit! Siehe auch: stackoverflow.com/questions/32333383/…

    – Ciro Santilli OurBigBook.com

    19. September 2018 um 8:16 Uhr

1369460cookie-checkWie benenne und rufe ich einen Git-Stash nach Namen ab?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy