Предположим, что вы работает в своем git-репозитории. Напатчили несколько веток, и вдруг - решили все переделать. Вернуть как было.
Можно конечно воспользоваться reflog-ом
например, вернуть ветку master на значение, которое было 3 часа назад, можно через
git-checkout master
git-reset --hard 'master@{3 hours ago}'
И так для всех веток. Это в том случае если вы помните, что начали патчить 3 часа назад.
Если же вы, как и я, сильно увлекаетесь и забываете о времени - это вряд ли подойдет.
На этот случай можно сделать хитрый ход конем. Через git-remote создается "удаленный репозиторий", который на самом деле совпадает с текущим репозиторием. Вот как это делается.
git-remote add backup `pwd`
git-fetch -f backup
После выполнения git-fetch -f backup все существующие ветки будут сохранены в refs/remotes/backup/<имя ветки>
И "восстановить" бранч master из бэкапа можно командой
git-checkout master
git-reset --hard backup/master
Еще раз: бэкап делается через git-fetch -f backup, а восстановление веток делается путем git-reset --hard backup/branch.
Этот метод можно развивать, создавая несколько бэкапов. Каждый такой "псевдо-удаленный" репозиторий представляет собой мгновенный слепок всех веток на момент git-fetch -f.
В дополнение к бэкапам можно использовать и "корзины". Например, перед откатом на бэкап вам возможно захочется сохранить текущие наработки во всех ветках, на всякий случай - вдруг пригодятся. Не проблема - создаете псевдоудаленный репозиторий "recyclebin", делаете git-fetch -f recyclebin - и все ваши наработки сохраняются в удаленных ветках этого репозитория. В дальнейшем их можно вернуть, сделать cherry-pick полезных патчей оттуда и т.п.
Также как и бэкапов, корзин можно сделать сколько угодно.
Комментариев нет:
Отправить комментарий