История о том как одна бага изменила все
git flow
-
develop нестабильный
-
фичи ветки очень большие и долгие
-
запутанная история
Все круто но

Как то раз я искал одну багу
Смотрю историю
- fix 3,4 after test
- fix offset and import sort
- fix after merge
- Merge branch 'develop' into CM-5435
- sdfsdfsf
- dfgdfg
- refactor new version
- ... over 50 commits ...
- new version
- create base model, files, other
Как-то так

Обратил внимание
-
Никак не помогает
-
История некрасивая
-
Она отражает то как мы разрабатывали
-
После завершения разработки эта информация никому не интересна
Я не хочу знать
- Как человек пришел к решению
- Как он обновлял ветку
- Какие он правки делал что бы его код заработал
Я хочу
- Видеть только рабочий код
- Понимать зачем было это изменение
Она может быть красивой

Почему история не красивая?
- не следим
- нет удобного инструментария
- наша история отражает процесс разработки
А что если
CM-5435 [front] Валидации компании: добавление шага проверки документов компании

Выводы
-
Мы подумали что это для нас не несет логического смысла и это все можно соединять
-
скорее важна сама задачи
-
тогда будет понятно кто что сделал
Гипотиза
-
каждая задача была атомарной
-
одна задача один коми
-
stateless релизы
-
то в целом ничего нам не мешает иметь прямую историю
Git rebase workfow
🚦convention
-
❌ merge commit
-
❌ Development process history
-
❌ commit without task
-
1️⃣ task - 1️⃣ commit
-
1️⃣ branch - 1️⃣ developer
-
1️⃣ main branch
-
✅ rebase
-
✅ stateless release
-
✅ rebase only task branches
-
✅ atomic tasks
✅ rebase
- Направленный ациклический граф
- нет веток
- git merge fast forward
- git pull
❌ merge commit
- имеет > 1 родителя
- содержит полезную нагрузку
❌ commit without task
- коммиты в develop
1️⃣ task - 1️⃣ commit
- боимся ребейза
- в задаче много изменений
- рефакторинг
- декомпозиция
1️⃣ main branch
- Нельзя из за мержевых коммитов
- Удаление develop
- Удаление feature branch
🚩 feature flags
✅ stateless release
-
Правки в релизах
- Конфликты
- Выкидываем задачи
🛠 Tools
-
🏗 decomposition
-
🚩 feature flags
-
🔍 testable changes
-
🔗 backward compatibility
В итоге
- ~ 2 релиза в день
- ~ 2h на задачу
- Весь код всегда в мастере
Bonus
- git reflog
- git cherry -v
- git cherry-pick
- git merge --squash
- git checkout -- file
- git commit --fixup <Hash>
- git rebase -i --autosquash
- git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
- git push --force-with-lease
- git pull vs git fetch
- git push -o ci.skip
- detached HEAD
История о том как одна бага изменила все
Git rebase flow
By Sergey Andreev
Git rebase flow
- 1,308