ОБРАТНЫЙ метод отмены всех изменений:
Я нашел этот вопрос после того, как сделал слияние и забыл о разработке сразу после этого. Вы догадались: я начал изменять несколько файлов прямо на мастере . D'Oh! Поскольку моя ситуация вряд ли уникальна (мы все это сделали, не так ли; ->), я предлагаю обратимый способ, который я использовал, чтобы отбросить все изменения, чтобы мастер снова выглядел как разработка .
Сделав, git diff
чтобы увидеть, какие файлы были изменены, и оценить масштаб моей ошибки, я выполнил:
git stash
git stash clear
После первого сохранения всех изменений они были очищены. Все изменения , внесенные в файлы с ошибками в мастер ушли и паритет восстановлен.
Допустим, теперь я хотел восстановить эти изменения. Я могу это сделать. Первый шаг - найти хэш тайника, который я только что очистил / сбросил:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
После изучения хеша я успешно восстановил незафиксированные изменения с помощью:
git stash apply hash-of-cleared-stash
Я действительно не хотел восстанавливать эти изменения, просто хотел убедиться, что могу их вернуть, поэтому я очистил их снова.
Другой вариант - применить тайник к другой ветке , а не стирать изменения. Таким образом, с точки зрения очистки изменений, внесенных при работе с неправильной ветвью, stash
вы получаете большую гибкость для восстановления после вашей бу-бу.
В любом случае, если вам нужны обратимые средства очистки изменений в ветке, вышесказанное является менее опасным способом в этом случае использования.
git reset --hard HEAD^