Учебный конструктор · система контроля версий Git
Git: ветки, merge и rebase — вживую
Git «не укладывается в голове», пока его не увидишь. Делай коммиты, создавай ветки, переключайся, сливай и перебазируй — и смотри, как меняется граф коммитов. Сразу станет ясно: ветка — это просто указатель, HEAD — «где ты сейчас», merge объединяет коммитом с двумя родителями, а rebase выпрямляет историю, но переписывает хеши.
Начни со сценария (Fast-forward / merge / rebase) — или собери свою историю с нуля. Незнакомые слова → словарь внизу. Где Git в общем процессе → конструктор CI/CD.
merge/rebase: влить/перенести выбранную ветку в текущую (main).
- → Чистый репозиторий: один коммит на main. HEAD на main.
📖 Словарь: простыми словами
Встретил незнакомое слово выше — найди его здесь. Коротко — суть; разверни — подробное объяснение с аналогией.
Коммит (commit)снимок проекта + ссылка на родителя
Неизменяемый снимок состояния файлов с уникальным хешем и ссылкой на родительский коммит (или несколько). Цепочка коммитов через родителей и образует историю — направленный граф.
Ветка (branch)подвижный указатель на коммит
Не «копия кода», а лёгкий ярлык, указывающий на коммит. Делаешь коммит — ярлык текущей ветки сдвигается на новый коммит. Создать ветку = поставить ещё один указатель; это мгновенно и дёшево.
HEADгде ты сейчас находишься
Указатель на текущую ветку (а через неё — на коммит). checkout/switch перемещает HEAD. Новый коммит привязывается к тому коммиту, на который смотрит HEAD.
Fast-forwardслияние простым сдвигом без нового коммита
Если твоя ветка не расходилась с целевой (только отстала), merge просто двигает указатель вперёд на её коммит — без merge-коммита. История остаётся линейной.
Merge (слияние)объединяет ветки коммитом с двумя родителями
Когда ветки разошлись, merge создаёт новый merge-коммит, у которого ДВА родителя. Плюс: история честно показывает, что и когда сливали. Минус: граф ветвистый. Безопасно для опубликованных веток.
Rebase (перебазирование)переносит коммиты на новое основание, переписывая хеши
Берёт твои коммиты и заново «накладывает» их поверх другой ветки — получается ЛИНЕЙНАЯ история, но это НОВЫЕ коммиты с новыми хешами (старые переписаны). Красиво, но НЕЛЬЗЯ для уже запушенных/общих веток — сломаешь историю другим.
Merge vs Rebaseсохранить ветвление честно vs выпрямить историю
Merge сохраняет реальную картину ветвления (ничего не переписывает). Rebase делает историю линейной и чистой, но переписывает коммиты. Правило: rebase — только для своих локальных, ещё не опубликованных веток; в общие ветки вливай через merge.
Дальше по теме
Эти инструменты связаны с текущим — так задачи стыкуются на практике.
Все инструменты — в каталоге.