Восстановить из git reset --hard? - PullRequest
376 голосов
/ 26 апреля 2011

Есть ли способ восстановить незафиксированные изменения в рабочем каталоге из git reset --hard HEAD?

Ответы [ 20 ]

6 голосов
/ 08 декабря 2018

если вы случайно сбросили коммит, то сделайте это,

git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case

при условии, что HEAD@{2} - это состояние, к которому вы хотите вернуться

6 голосов
/ 24 марта 2017

Вы можете вернуть коммит после выполнения reset --hard HEAD.

. Используйте "git reflog" для проверки истории HEAD в ветке.

Youувидит ваш коммит и его идентификатор здесь.

Do

git reset {commit Id of the commit you want to bring back}
4 голосов
/ 28 января 2019

Я столкнулся с той же проблемой, и я почти сошел с ума ... Сначала я зафиксировал проект и объединился ... позже, когда я попытался запустить git push --set-upstream origin master Я получил эту ошибку

  fatal: refusing to merge unrelated histories

поэтому я запустил git reset --hard HEAD, и он удалил 3-недельный проект, но эти несколько команд ниже спасают день:

git reset HEAD@{1}         //this command unstage changes after reset
git fsck --lost-found      //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b

надеюсь, это поможет

4 голосов
/ 17 февраля 2016

Если вы, к счастью, открыли те же файлы в другом редакторе (например, Sublime Text), попробуйте ctrl-z на них. Это просто спасло меня ..

3 голосов
/ 12 августа 2018

Если вы пытаетесь использовать код ниже:

git reflog show
# head to recover to
git reset HEAD@{1} 

и по какой-то причине получаете:

ошибка: неизвестный ключ `e '

затем попробуйте обернуть HEAD@{1} в кавычки

git reset 'HEAD@{1}'
3 голосов
/ 06 сентября 2017

Я обнаружил, что любые неподтвержденные файлы до того, как git reset --hard <commit> будут удалены из истории git. Однако мне посчастливилось держать сеанс редактора кода открытым в течение всего времени, когда я вырывал свои волосы, и обнаружил, что простой control + z в каждом из затронутых файлов возвращает состояние файла обратно в версию прежде чем Git так любезно сбросил все, что я специально не просил. Hooray!!

2 голосов
/ 24 августа 2018

Правильные ответы. Хорошо, теперь я люблю мерзавца :-) Вот более простой рецепт.

git log HEAD@{2}
git reset --hard  HEAD@{2}

Где «2» - это номер возврата, на который вы совершили свои изменения. В моем случае, прервано коллегой и начальником, чтобы помочь отладить некоторые проблемы со сборкой; Итак, дважды сделал сброс - жесткий; Итак, HEAD и HEAD @ {1} были перезаписаны. Уфф, потерял бы нашу тяжелую работу.

1 голос
/ 09 марта 2016

Ссылочный ответ от этого SO,

После запуска git reflog show говорят, что вы хотите перейти к фиксации 9300f9d

после запуска git reset 9300f9d

вы можете сделать git status, а затем вам может понадобиться проверить ваши файлы, чтобы восстановить изменения

git checkout - filepath / name

0 голосов
/ 21 мая 2018

Если вы разрабатываете на Netbeans, посмотрите между вкладками файлов и областью редактирования файлов. Есть «Источник» и «История». В «Истории» вы увидите изменения, сделанные с помощью контроля версий (git / other), а также изменения, сделанные локально. В этом случае локальные изменения могут спасти вас.

0 голосов
/ 09 мая 2017

Когда мы делаем git reset --hard и все локальные незафиксированные изменения удаляются. Чтобы восстановить изменения - в IDE щелкните файл, сравните файл с локальной историей, в которой будут перечислены изменения по дате, и мы сможем восстановить данные. Ваш день сохранен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...