Как отменить git скрывать очистить

Я выполняю git сохранение закладок "ABC", и по ошибке я сделал git stash clear. Как я могу получить данные, которые были в stash ABC. Помогите пожалуйста

Ответ 1

Как можно найти в документации git stash, вам может быть повезло, если это работает:

Восстановление задержек, которые были ошибочно очищены/опущены

Если вы ошибочно сбросите или очистите заготовки, они не могут быть восстановлены с помощью обычных механизмов безопасности. Тем не менее, вы можете попробовать следующее заклинание, чтобы получить список закладок, которые все еще находятся в вашем репозитории, но больше недоступны:

git fsck - unreachable | grep commit | cut -d\-f3 | xargs git log --merges --no-walk --grep = WIP

Если вы обнаружили пометку, которую вы сбросили по ошибке, вы можете сделать:

git stash apply <stash>

EDIT: используйте эту команду вместо git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP

Ответ 2

Запустите эту команду, чтобы найти коммит:

git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP

будет перечислять что-то вроде:

Checking object directories: 100% (256/256), done.
commit c36e565014d9a927c36f16e78bc327eb375d33b8
Merge: dff6bc1 4e05a0c
Author: suhailvs <[email protected]>
Date:   Thu Jul 19 13:32:01 2018 +0530

WIP on master: dff6bc1 added menu

Затем c36e565014 что совершить c36e565014:

git checkout c36e565014

Ответ 3

Я также удалил stash, но с помощью guitGitKraken, поэтому я не знаю точно, какие команды git он выполнил. Выбранный ответ не сработал у меня, но по крайней мере поставил меня на правильный путь.

В моем случае, поиск вручную - неработающих объектов работал. Я уверен, что есть более эффективный способ, но я просто рад, что смог восстановить изменения.

ids=`git fsck --unreachable | grep blob | cut -d ' ' -f3`
number_of_ids=`echo $ids | wc -l | tr -d '[:space:]'`
for i in {1..$number_of_ids}; do git show `echo $ids | sed -n ${i}p` > evaluate$i.rb;done; 

Таким образом, это сохраняет все недостижимые объекты в файлах с префиксом "оценивать". Затем я открыл все файлы в текстовом редакторе (возвышенный для меня subl evaluate*) и каждый раз оценивал каждый файл, вручную копируя и вставляя файл в старую версию исходного файла, если это был файл из stash, который я удалил.

Советов:

  • Измените .rb в соответствии с расширением файла для файлов, которые вы ищете, чтобы получить соответствующую подсветку синтаксиса, если вы этого хотите.
  • Если ваши файлы не включены, вы можете расширить область поиска, удалив | grep blob (капли были там, где я нашел свои файлы).

Ответ 4

Все приведенные выше ответы заканчиваются git stash apply [commit] что хорошо, но не является точной отменой git stash clear. Для этого вам нужно заново спрятать потерянный stash-commit. Я нашел эти инструкции, которые почти работали, но нуждались в флаге, чтобы пройти весь путь туда. Подводя итог:

  1. Найдите осиротевшие git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk: git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk
  2. Заново git update-ref --create-reflog refs/stash 4b3fc45c94caadcc87d783064624585c194f4be8 -m "My recover stash" коммит: git update-ref --create-reflog refs/stash 4b3fc45c94caadcc87d783064624585c194f4be8 -m "My recover stash"