Импульсивность и git
В разработке программ я весьма импульсивен и резок. Правки часто делаю быстро. И тому конечно есть причины. Находясь в процессе изучения и описания одной задачи всплывают посторонние микро-задачки, или ошибки, или мелкие поправочки которые следует мгновенно исправить.
Конечно в git для этого есть удобные и практичные инструменты (branch, stash) да не всегда о них думаешь в программистском запале.
Для этого я создаю ветку devlog (или даже devlog/some_task) и в ней после каждой успешной компиляции среда разработки запускает скрипт, который фиксирует изменения. Когда же я прихожу к согласию с собой и признаю задачу решенной (или просто в нужный момент), я перекидываю --squash результирующий патч в нужную ветку ( для чего у меня есть спец. скриптец). Последняя же фиксация копируется в служебную ветку attic/с_датой_коммита.
Что мы имеем в результате?
- Полная версия изменений локально хранится и доступна для анализа или аварийного восстановления
- Лишнее не передается в основной репозиторий
- Момент объединения результирующего коммита дополнительно фиксируется в архиве
Архивные ветки выглядят приблизительно так
attic/09.10.30_15-44
attic/09.10.30_16-08
attic/09.10.30_16-21
attic/09.10.30_17-24
attic/09.10.30_17-29
attic/09.10.31_14-32
И могут быть также легко удалены (Только если вы точно не хотите хранить историю (на всякий случай))
git branch | grep attic/0 | xargs git branch -D
На самом деле после столь жесткого удаления веток история все еще будет храниться в reflog. Но и её можно, при желании, победить (для совсем уже смелых)
git reflog expire --expire=0 --all
git repack -ad
git prune
Программируйте и ничего не бойтесь!


