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 --squashSubtree особенно хорош для проектов, где внешний код должен быть частью общего коммита и истории.
Stash: временное сохранение изменений
git stash позволяет сохранить текущие изменения, не коммитя их, и вернуться к чистому рабочему каталогу. Это удобно, если вы не закончили работу, но нужно срочно переключиться на другую ветку.
git stash
git checkout mainВернуться к сохранённым изменениям можно с помощью:
git stash popСписок всех сохранённых stash’ей:
git stash listBisect: поиск проблемного коммита
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"Больше интересных новостей
Советы для программистов по изучению английского языка
15 крутых Android UI библиотек для ваших программ
Создание 2D игры на Unity за час! Краткий гайд
Что нужно знать хорошему Frontend-разработчику