2516 Stimmen

Wie kann man einen verlorenen Stash in Git wiederherstellen?

Ich verwende häufig git stash y git stash pop um Änderungen in meinem Arbeitsbaum zu speichern und wiederherzustellen. Gestern hatte ich einige Änderungen in meinem Arbeitsbaum, die ich zwischengespeichert und wiederhergestellt habe, und dann habe ich weitere Änderungen an meinem Arbeitsbaum vorgenommen. Ich würde gerne zurückgehen und die gestern gespeicherten Änderungen überprüfen, aber git stash pop scheint alle Verweise auf die zugehörige Übertragung zu entfernen.

Ich weiß, dass ich, wenn ich die git stash dann .git/refs/stash enthält die Referenz der Übergabe, die zur Erstellung des Stash verwendet wurde. Und .git/logs/refs/stash enthält den gesamten Vorrat. Aber diese Referenzen sind verschwunden, nachdem git stash pop . Ich weiß, dass der Commit noch irgendwo in meinem Repository ist, aber ich weiß nicht, was er war.

Gibt es eine einfache Möglichkeit, die gestrige Stash-Commit-Referenz wiederherzustellen?

Für mich ist das heute nicht so wichtig, weil ich tägliche Backups habe und auf den Arbeitsbaum von gestern zurückgreifen kann, um meine Änderungen zu erhalten. Ich frage, weil es einen einfacheren Weg geben muss!

3voto

Kostandin Vllahu Punkte 766
git fsck --unreachable | grep commit | cut -d" " -f3 | xargs git log --merges --no-walk --grep=WIP

Versuchen Sie dies einmal

1voto

anapsix Punkte 1409

Da ich den ungefähren Dateinamen und den Speicherort kannte, war ich in der Lage, abgelegte Stash-Dateien zu finden, indem ich "Dangling Commits" nach dem Pfad durchsucht habe

for i in $(git fsck --no-reflogs | awk '/dangling commit/ {print $3}'); do
  if git log -5 --name-only -u $i | grep -q "<path-to-files>/.*<partial-file-name>.*"; then
    echo "found something in commit $i";
  fi;
done

0voto

Sie können den folgenden Prozess Schritt für Schritt befolgen:

1- verwenden Sie die folgende Funktion, um alle unerreichbaren Commits aufzulisten git fsck --unreachable

2- um unerreichbare Commit-Hashs anzuzeigen durch git show hash

3- Kopieren Sie alle Logs, Sie können Logs wie unerreichbarer Blob, Commit, Tree sehen.

4- Git Stash mit Log mit Commit-Hash anwenden git stash apply [replace hash]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X