
Git на продвинутом уровне: rebase, cherry-pick, subtree
Освойте продвинутые возможности Git: от rebase и cherry-pick до subtree и интерактивных методов работы с историей. Управляйте ветками и коммитами как профессионал.
Rebase: перезапись истории коммитов
Команда git rebase — мощный инструмент для изменения истории коммитов и последовательности изменений. Она особенно полезна при необходимости поддерживать чистую и линейную историю разработки.
Например, вы работаете в ветке feature, а ветка main уже обновилась. Чтобы подтянуть изменения без создания лишних merge-коммитов, используйте:
git checkout feature git rebase main
Ветка feature теперь будет содержать ваши коммиты, «переписанные» поверх последнего состояния main.
Также вы можете воспользоваться интерактивным режимом:
git rebase -i HEAD~4
Это позволяет редактировать, объединять (squash), удалять или переупорядочивать коммиты. Такой подход удобен перед пушем в общий репозиторий — история станет аккуратной и понятной.
Cherry-pick: выборочный перенос коммитов
Если вам нужно перенести конкретный коммит из одной ветки в другую, но не всё содержимое, команда git cherry-pick пригодится.
Допустим, вы хотите перенести исправление из ветки bugfix в ветку develop:
git checkout develop git cherry-pick a1b2c3d
Ветка develop теперь включает коммит с указанным хэшем, даже если он из другой ветки.
Cherry-pick полезен для изолированных изменений или при выборе отдельных исправлений для разных версий продукта.
Subtree: подключение других репозиториев
git subtree позволяет встраивать один репозиторий в другой как подпроект. В отличие от submodule, subtree не требует отдельного управления зависимостями и работает как часть основного репозитория.
Например, подключим внешний проект:
git subtree add —prefix=vendor/lib https://github.com/username/library.git main —squash
Эта команда скачает внешний репозиторий и разместит его в папке vendor/lib вашего проекта.
Чтобы обновить внешний проект позже:
git subtree pull —prefix=vendor/lib https://github.com/username/library.git main —squash
Subtree особенно хорош для проектов, где внешний код должен быть частью общего коммита и истории.
Stash: временное сохранение изменений
git stash позволяет сохранить текущие изменения, не коммитя их, и вернуться к чистому рабочему каталогу. Это удобно, если вы не закончили работу, но нужно срочно переключиться на другую ветку.
git stash git checkout main
Вернуться к сохранённым изменениям можно с помощью:
git stash pop
Список всех сохранённых stash’ей:
git stash list
Bisect: поиск проблемного коммита
git bisect — отличная команда для поиска первого коммита, вызвавшего баг. Git использует бинарный поиск по истории коммитов.
Пример:
git bisect start git bisect bad # текущий коммит содержит баг git bisect good a1b2c3d # коммит, в котором всё работало
Git начнёт переходить между промежуточными коммитами, пока вы не укажете, в каком из них баг впервые появился.
Clean: удаление ненужных файлов
Если в каталоге проекта остались временные или сгенерированные файлы, которые не отслеживаются Git, их можно удалить командой:
git clean -fd
Флаг -f означает «force», а -d — удаление директорий. Будьте осторожны: эта команда необратима.
Shortlog и log: анализ истории коммитов
git shortlog позволяет быстро увидеть список авторов и количество их коммитов:
git shortlog -sn
А команда git log с параметрами — мощный способ визуального анализа истории:
git log —oneline —graph —decorate —all
Это покажет дерево коммитов в компактной форме.
Tag: метки и версии
git tag используется для маркировки важных коммитов, например — релизов:
git tag v1.0.0 git push origin v1.0.0
Можно создавать аннотированные теги с дополнительной информацией:
git tag -a v1.1.0 -m «Релиз версии 1.1.0»



























