Wie kann ich nur einen Teil eines Git-Stashs anwenden?

Lesezeit: 3 Minuten

Benutzer-Avatar
Rose Perrone

Ich möchte einige der Änderungen in einem Git-Stash auf einen Commit anwenden und die restlichen Änderungen auf einen anderen.

  • Was meinst du mit “halb”? Die Hälfte von was? Die Hälfte jedes Vorrats oder die Hälfte der Vorratsliste?

    – Fatih Arslan

    4. März 2013 um 23:09 Uhr

  • Könnte es von sein halb was meinen Sie eine Portion?

    – Bitmaske

    4. März 2013 um 23:10 Uhr


Benutzer-Avatar
Löwe

git checkout [email protected]{0} -- <filename>

Sie können dies auch mit einer Liste oder einem Glob von Dateinamen tun.

  • checkout ist falsch, wenn der Stash aus einem früheren Commit stammt.

    – Nicolai

    29. April 2020 um 11:53 Uhr

Benutzer-Avatar
Dmitri Minkowski

Sieht aus wie Sie verwenden können git checkout -p mit einer Stash-Referenz, wie [email protected]{0}. Auf diese Weise können Sie Stück für Stück auswählen, was Sie auf Ihren Arbeitsbaum aus dem Vorrat anwenden möchten.

Nachdem Sie mit der Verwendung fertig sind git checkout -p, die von Ihnen akzeptierten Änderungen wurden auf Ihren Arbeitsbaum angewendet und dem Cache/Index hinzugefügt, bereit zum Übertragen. Sie können verwenden git checkout -p [email protected]{0} mehrmals, wählen Sie die gewünschten Patches aus und übernehmen Sie so oft Sie möchten.

  • Das ist genau das, was ich brauche, ich denke, die anderen Antworten werfen Änderungen von nachfolgenden Commits und/oder Arbeitsbäumen weg. Beachten Sie, dass es sehr nützlich ist, auch einen Pfad zu übergeben, insbesondere wenn Ihr Zweig seit dem Stash rebasiert wurde. Dadurch wird vermieden, dass zwischenzeitliche Änderungen (an anderen Pfaden, die Sie nicht wiederherstellen müssen) seit dem Rebase manuell herausgefiltert werden.

    – Nick Treleaven

    4. April um 11:34 Uhr


Benutzer-Avatar
Mort

Wenden Sie den Patch nur auf die Dateien an, die Sie ändern möchten.

git show --first-parent [email protected]{0} -- <file(s) in question> | git apply

  • Ich denke, die Standardausgabe hat sich geändert, da Sie die jetzt angeben müssen -m Möglichkeit (git show -m stash...), um ein Diff auszugeben git apply versteht. Ohne das habe ich error: unrecognised input aus git apply.

    – Andreas Frankreich

    21. Februar 2019 um 18:10 Uhr

  • @AndrewFrance Ich kann nicht viele Hinweise finden -m. Können Sie mich auf eine Dokumentation verweisen und ich werde meine Antwort aktualisieren.

    – Mort

    24. Februar 2019 um 3:51 Uhr

  • Die Dokumentation scheint zu fehlen, -m ist nicht in der Optionsliste auf der Manpage für git-show aber es wird kurz in der erwähnt kombiniertes Diff-Format Sektion. Es ist mir nicht klar, warum es funktioniert, sorry!

    – Andreas Frankreich

    19. März 2019 um 8:52 Uhr

  • Ich finde -m ist für git stash show (mit denselben Optionen wie git diff), nicht für git show stash

    – Benutzer2543253

    8. Oktober 2019 um 10:57 Uhr

  • @Cilyan Ich habe den Fehler reproduziert. Stashes werden jetzt anscheinend als Merge-Commits gespeichert und erzeugen ein “kombiniertes Diff”. Wenn ich hinzufüge --first-parent mit dem show-Befehl funktioniert es wieder. Antwort aktualisiert.

    – Mort

    1. September 2020 um 13:09 Uhr


Benutzer-Avatar
Alex

Unstash das Stash …

git stash pop

…verwenden git add im Patchmodus…

git add -p

… und dann begehe das …

git commit -m "Partial stashed commit"

Das ist mir schnell in den Sinn gekommen, ohne die Dokumentation gelesen zu haben. Leos Antwort hat einen viel besseren Weg, dies zu erreichen.

1270480cookie-checkWie kann ich nur einen Teil eines Git-Stashs anwenden?

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

Privacy policy