Ich habe einige lokale Änderungen gespeichert, bevor ich eine komplizierte Zusammenführung durchgeführt habe, die Zusammenführung durchgeführt und dann dumm vergessen, vor dem Ausführen eine Festschreibung vorzunehmen git stash pop
. Der Pop verursachte einige Probleme (schlechte Methodenaufrufe in einer großen Codebasis), die sich als schwer zu finden herausstellen. Ich bin gelaufen git stash show
, damit ich zumindest weiß, welche Dateien geändert wurden. Wenn nichts anderes, denke ich, ist dies eine Lektion, um mehr zu begehen.
Meine Frage: Ist es möglich, den Stash Pop rückgängig zu machen, ohne auch die Zusammenführung rückgängig zu machen?
git stash pop
ohne dich vorher zu verpflichten. Was haben Sie getan, um das zu erreichen?git stash pop
nach dem Staging der Änderungen (die ich jedoch nicht festgeschrieben habe) mit der Version 2.25.0.windows.1 von gitstash pop/apply
vor dem Festschreiben verloren haben, können Sie sie auslösengit fsck --lost-found
. Dieser Befehl durchläuft die baumelnden Blobs (tatsächliche Dateien für diejenigen, die mit der Git-Terminologie nicht vertraut sind), die bereitgestellt, aber nirgendwo festgeschrieben wurden (daher baumeln), und legt sie unter dem Verzeichnis .git / lost-found / ab , wo Siegit show
sie sehen können wenn dies die Dateien sind, nach denen Sie suchen.Antworten:
Versuchen Sie, Wie man einen abgelegten Stash in Git wiederherstellt. um das Versteck zu finden, das du aufgetaucht bist. Ich denke, es gibt immer zwei Commits für einen Stash, da der Index und die Arbeitskopie erhalten bleiben (so oft ist das Index-Commit leer). Dann sehen
git show
sie denpatch -R
Unterschied und verwenden ihn , um sie zu entfernen.quelle
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
(über den Link) finden und habe das Problem von diesem Diff einfach manuell gefunden. Vielen Dank!git diff -p ${STACH_SHA1}~1 ${STASH_SHA1} | patch -R -p1
; Ich habe esgit show
wie vorgeschlagen versucht , aber die Ausgabe war nicht gut für Patches. auch hatte ich das bietet-p1
Option Patch, um das abzustreifena/..
undb/..
Element , dassgit diff
Puts vor den Dateien sonst nicht die Pfade aus der Repository Wurzel lösen würde. VORSCHLAG: Seien Sie vorsichtig und begehen Sie das Chaos in einem separaten Zweig, bevor Sie mit dem Patch spielen.stash pop
undstash push
löst ein Commit aus, das die Änderungen an Index und Arbeitsverzeichnis speichert, oder?Von
git stash --help
Dies half mir besser als die akzeptierte Antwort mit dem gleichen Szenario.
quelle
Wenn Ihre Zusammenführung nicht zu kompliziert wäre, wäre eine andere Option:
Danach bleiben nur noch die Änderungen aus dem Vorrat übrig, den Sie zu früh fallen gelassen haben.
quelle