Случайно вернулся к мастеру, потерял незафиксированные изменения
Мне удалось сделать огромную ошибку (в понедельник утром)
Работая над мастером, забудьте создать новую ветку, внесите изменения в файлы, а затем непреднамеренно верните мастеру, потеряв все обновления.
Я не фиксировал обновленные файлы.
Я потерял все обновления или могу их загрузить?
Не спрашивайте меня, потому что каждый раз, когда я думаю об этом, я должен ударить себя в лицо.
Ответы
Ответ 1
Если у вас не было совершено, поставлено или спрятать сделанные вами изменения, вы не сможете восстановить эти изменения.
РЕДАКТИРОВАТЬ: Восстановление потерянных изменений. Добавьте это в предложение Mark Longair (в комментарии). Это также включает пару ссылок SO из его ответа ниже (*), что я нашел довольно информативным.
-
Если у вас когда-либо было зафиксировано какое-то изменение, и он потерял эту фиксацию (например, совершение в отдельном состоянии), вы можете найти это commit с помощью reflog
. См. Этот вопрос fooobar.com/questions/701/....
-
Если вы потеряли последний поставленный, вы также можете его восстановить. См. Этот вопрос fooobar.com/questions/701/.... *. (Я никогда не использовал или не пробовал это сам).
-
Если у вас есть спрятанное изменение, вы также можете восстановить его с помощью pop
или apply
. (Я не уверен, что всплывающие/выпавшие штампы также можно восстановить, которые не были зафиксированы). Вы можете найти этот Восстановить упавший штрих в git".
Если есть какие-либо другие методы, которые любой может предложить, я бы отредактировал этот ответ, чтобы добавить их.
Ответ 2
Два длинных снимка: некоторые IDE, такие как Delphi, сохраняют историю редактора. У вас может быть какое-то обращение.
Затем, если у вас был локальный рабочий каталог, расположенный в папке MyDocuments, он, возможно, был автоматически резервным копированием Windows Home Server, Carbonite, MozyPro и т.д., Они обычно "устанавливают и забывают". возможно, вы забыли его?
Ответ 3
Я застрял в той же ситуации.
Имел список измененных файлов в терминале до --hard reset, перешел в мой редактор (Sublime 2, не имеет значения, хотя), открыл каждый файл и ударил cmd + z (отменить) один раз, это эффективно уменьшило изменения, сделанные жестким reset, и я получил мои незафиксированные изменения назад:)
Ответ 4
Критический вопрос здесь - это то, что вы сделали после внесения изменений в файлы. Если вы создали коммит, содержащий новое состояние файлов, то вы сможете вернуть их, просмотрев последние записи в git reflog
, найдя SHA1sum коммита, а затем создав новую ветку из нее с помощью git branch recovered <SHA1sum>
или аналогичный. Вот пример этого в этом ответе.
Если вы сделали git add
в любом из файлов для их создания, вы также сможете вернуть их, но это скорее больше работы. Якуб описывает, как это сделать в этот ответ.
Если вам удалось сделать git stash
, чтобы дать себе чистый статус, то, конечно, вы можете вернуть его, как и любой другой тайник.
В противном случае, я боюсь, что новости не очень хорошие.
Надеюсь, что это не ярость, чтобы указать на этот пост-hoc, но чтобы просто вернуться к ветке master
, вам не нужно было бы использовать любую команду, которая может потерять ваши данные - git checkout master
сказал бы вы, что вы уже были на ведущей ветке и показываете какие-либо незафиксированные изменения. (Возможно, git reset --hard
должен иметь "Да, я действительно имею в виду это" подтверждение, если есть незафиксированные изменения, учитывая, как часто люди ^W
я теряю данные таким образом.)
Ответ 5
Используйте reflog. git reflog
покажет вам историю всех совершений, в которых вы были, в хронологическом порядке.
Если вы потеряли свои изменения, "проверив мастера", вы, вероятно, работали без головы. git status
расскажет вам, работаете ли вы без головы. (Как и git branch
).
Работа без головок не так уж плоха (я делаю это все время, намеренно), но вы будете больше полагаться на рефлог.
Если вы не зафиксировали свои изменения каким-либо образом, однако, нет способа получить эти файлы. Единственный реалистичный способ, которым это могло случиться, - это выполнить жесткий reset или явно принудительно выполнить проверку. Не форсируйте изменения, если вы не уверены, что вам комфортно проигрывать данные.
Обычно, в git, форсирование выполняется путем указания -f
.
Ответ 6
Я сделал то же самое, не раз, к сожалению. Не совершая ничего git не имеет понятия, что вы написали. Даже если вы сделали фиксацию тогда, когда назад, я не уверен, что рефлекс поможет.