понедельник, 29 марта 2010 г.

Git-remote

Взято здесь

Предположим, что вы работает в своем 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 полезных патчей оттуда и т.п.

Также как и бэкапов, корзин можно сделать сколько угодно.

Комментариев нет:

Отправить комментарий