Я выполняю git сохранение закладок "ABC", и по ошибке я сделал git stash clear. Как я могу получить данные, которые были в stash ABC. Помогите пожалуйста
Как отменить git скрывать очистить
Ответ 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. Я нашел эти инструкции, которые почти работали, но нуждались в флаге, чтобы пройти весь путь туда. Подводя итог:
- Найдите осиротевшие
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
- Заново
git update-ref --create-reflog refs/stash 4b3fc45c94caadcc87d783064624585c194f4be8 -m "My recover stash"
коммит:git update-ref --create-reflog refs/stash 4b3fc45c94caadcc87d783064624585c194f4be8 -m "My recover stash"