пятница, 13 ноября 2009 г.

Интерактивное перебазирование в Git.

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

TortoiseGit - замечательный клиент Git для Windows, пожалуй даже лучший.
Одна из удобнейших фишек объединение нескольких локальных коммитов в один.
Корпоративная политика в настоящее время запрещает ставить Git и TortoiseGit на основную машину разработчика.
А, в отсутствие админских прав, на работе, я не могу установить TortoiseGit самостоятельно.
Клиент имеется в виртуальной машине. Но только для того, чтобы поправить пару коммитов, стартовать виртуалку как-то лениво и непрактично.
На прочих осях, с которыми я работаю, TortoiseGit отсутствует, а местные клиенты такой фишки не имеют.

Я давно знаю про команду rebase и ключик "-i".
Но у меня всё как-то никак не получалось увидеть список этих "pick", "squash", "edit".

Первый мой просчёт в том, что для удобства работы, в качестве редактора я использовал Notepad++.
По, надеюсь, покамест неведомой мне причине, сотрудничество Git и Notepad++ при перебазировании хромает и редактор открывается просто пустым.
Поэтому откатываемся к vim.

Второй недосмотр, что я периодически забираю изменения из SVN: git checkout master && git svn rebase.
Затем синхронизирую хакаемый бранч по: git rebase master.
Таким образом в интерактивном режиме у меня список операций всегда был пуст.
Но гит показывал, что всё равно исправно перебазирует все коммиты, которые я просил.

Оказывается достаточно сделать хотя бы один коммит после перебазирования и тогда уже можно делать
git rebase -i HEAD~хотьсто.
Небольшо хинт для тех кто с vim на "Вы". Чтобы автоматом заменить все pick на squash, переходим в командную строку, нажав ":" (возможно понадобится выйти в режим просмотра сначала).
Пишем там:
%s/pick/squash/
Теперь остаётся только заменить первый squash на pick.
Можно использовать сокращения: "s" и "p", соответственно.

Ни в коей мере, не умаляя других достоинств TortoiseGit, теперь у меня нет необходимости запускать виртуалку только для того чтобы слить несколько коммитов в один.

Как говорится, учите матчасть ;)

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