Регулярно выполняйте коммиты… Восстановление поэтапных изменений Git.

Регулярно совершайте коммиты… это урок, который я усвоил сегодня на собственном горьком опыте.

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

Итак, когда я завершаю работу над изменениями и структурирую сообщение коммита, я помню, что увидел кое-что, что нужно исправить. Когда я проводил поиск, чтобы убедиться, что часть избыточного кода удалена и заменена унаследованной функциональностью, я понял, что некоторые экземпляры избыточного кода все еще существуют. При проверке я обнаружил, что в какой-то момент в прошлом я создал дубликат проекта с целью профилирования приложения с использованием разных сред, pypy3 и python3, и оставил папку, существующую в родительской/рабочей папке проект, хотя я создал для него другую ветку в удаленном репозитории git, и именно здесь существовал избыточный код.

Мое решение состояло в том, чтобы вытащить ветку реализации pypy3 (из «дубликата» папки) в исходную папку/репозиторий и удалить ее папку с моей локальной машины. Здесь я сделал первую ошибку, которая стоила мне больших денег.

Я вытаскиваю ветку реализации pypy3, хотя я нахожусь в ветке python3, и она сразу же объединяется с веткой python3. Я предположил, что, поскольку вы можете отправить другую ветку на ее удаленный эквивалент, находясь в другой ветке, тогда я мог бы перетащить ветку удаленной реализации pypy3 в ветку локальной реализации pypy3, находясь в ветке реализации python3.

С ветвью реализации pypy3, объединенной с рабочей ветвью и неустановленными изменениями, я не могу git reset --hard для устранения ненужных изменений. Я решил сначала сделать резервную копию всего в новой ветке, чтобы в случае чего, если я потеряю незафиксированные изменения в рабочей ветке, они все еще были в резервной ветке. Так что я git checkout -b в новую ветку, а неустановленные изменения перетекают в новую ветку. Я помещаю их для фиксации, думая, что если я вернусь к ветке реализации python3, поэтапные изменения все равно останутся в резервной ветке, ожидающей фиксации, но я ошибаюсь.

Я немедленно проверяю ветку реализации python3 и git reset --hard чтобы устранить изменения, внесенные путем слияния ветки реализации pypy3 с веткой реализации python3, и именно так я теряю всю свою работу, над которой я тратил много времени.

Не зная, как отменить полный сброс, я решил выяснить, возможно ли это в Интернете. Я трачу на это довольно много времени и ничего не придумываю. Согласно моим исследованиям на этот раз, после полной перезагрузки можно восстановить только коммиты. Поскольку я использую атом в качестве текстового редактора, я также рассматриваю возможность восстановления изменений через атом, но файлы восстановления не существуют. Как только я начинаю впадать в депрессию, я не забываю прошептать молитву, и после молитвы я приземляюсь на ветку переполнения стека, которая будет моим источником радости в течение дня.

Учитывая, что я подготовил изменения для коммита, при потере изменений их можно восстановить с помощью git fsck --lost-found который создает подкаталог потерянных файлов в каталоге .git и записывает в него висячие изменения, коммиты и теги. Чтобы получить файлы, которые я использую git show <blob hash> проверить содержимое отдельных найденных файлов и восстановить их.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *