Случайно вернулся к мастеру, потерял незафиксированные изменения

Мне удалось сделать огромную ошибку (в понедельник утром) Работая над мастером, забудьте создать новую ветку, внесите изменения в файлы, а затем непреднамеренно верните мастеру, потеряв все обновления. Я не фиксировал обновленные файлы.

Я потерял все обновления или могу их загрузить?

Не спрашивайте меня, потому что каждый раз, когда я думаю об этом, я должен ударить себя в лицо.

Ответ 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 не имеет понятия, что вы написали. Даже если вы сделали фиксацию тогда, когда назад, я не уверен, что рефлекс поможет.