Урок 02 · Одно понятие

Ветка: что это на самом деле

Весь урок — про одно слово. Разберём его на конкретной ситуации: два агента, одно приложение, никто никому не мешает.

~15 минутнужен урок 1вводить в терминал ничего не надо

Зачем это в твоей миссии

Ветка — это тот самый механизм, который позволяет двум агентам работать над твоим приложением одновременно и не затирать работу друг друга. Всё остальное — worktrees, PR, слияния — надстройки над ней. Если ветка понятна, дальше пойдёт легко.

Начнём с ситуации

Само слово «ветка» мало что объясняет, поэтому определение отложим на конец урока. Сначала — живая ситуация, из которой оно вырастет само.

Представь: у тебя есть небольшой интернет-магазин. Три файла, два коммита позади. И две задачи, которые хочется делать одновременно:

Ты хочешь посадить на них двух агентов. Пройди историю по шагам и смотри сразу на две вещи: что происходит с историей слева и что лежит у тебя в папке справа. Вторая половина — самая важная.

Теперь определение

После того как ты это увидел, определение читается уже без напряжения:

«Ветка в Git — это просто легковесный подвижный указатель на один из этих коммитов».

Pro Git, «О ветвлении в двух словах»

Разберём эту фразу по частям, каждую — на том, что ты только что видел.

СловоЧто оно значит на нашем примере
указательБирка feature/pay не содержит кода. Она содержит одно: айди снимка «c». Всё.
подвижныйНа шаге 3 агент сделал коммит — и бирка сама переехала с «b» на «c». Никто её не двигал руками.
легковесныйИмя плюс айди — это около сорока байт. Поэтому на шаге 5 вторая ветка создалась мгновенно и ничего не заняла.
на коммитВетка всегда приклеена к конкретному снимку. Не к папке, не к диапазону изменений — к одной точке в истории.

Два факта, из которых следует всё остальное

Первый: ветка — это имя, приклеенное к одному снимку, и она едет за твоими коммитами.
Второй: переключение ветки перекладывает содержимое папки под тот снимок, к которому она приклеена.

Что обычно остаётся непонятным

«Где физически лежит работа второго агента, пока я на main?»

В скрытой папке .git внутри твоего проекта. Там хранятся все снимки всех веток одновременно — просто на витрину, то есть в видимую часть папки, Git выкладывает только один из них. Ничего не «уходит» и не «прячется на сервер»: всё лежит у тебя на диске, в паре сантиметров от того места, куда ты смотришь.

«Значит, я могу потерять работу, переключившись не туда?»

Закоммиченную — практически нет, и это главная причина приучить агента коммитить часто. Пока работа лежит в снимке, к ней всегда можно вернуться. А вот не закоммиченные правки — те, что агент только что написал и ещё не сохранил снимком — при переключении действительно могут мешать: Git либо утащит их за собой в другую ветку, либо откажется переключаться. Поэтому первое, что стоит требовать от агента: сначала коммит, потом всё остальное.

«А папка одна? Тогда как два агента работают одновременно?»

Отличный вопрос, и ты нащупал ровно то место, где обычно спотыкаются. В нашей истории агенты работали по очереди: ты переключался между ветками и передавал папку то одному, то другому. Для настоящей одновременности нужно, чтобы у каждого агента была своя папка — и именно для этого существуют worktrees. Это тема отдельного урока, но теперь понятно, какую проблему они решают: ветки разводят историю, worktrees разводят папки.

«Зачем вообще возиться, если можно просто делать всё в main?»

Можно — пока задача одна и она удалась. Ветка окупается в трёх ситуациях: когда работа может не получиться и нужен путь назад; когда параллельно идёт что-то ещё; когда результат надо показать до того, как он попадёт в рабочую версию. У тебя с агентами регулярно случаются все три сразу.

Как это звучит в инструкции агенту

Старт работы

Создай ветку feature/pay от main и работай только в ней. Коммить каждый законченный кусок, а не всё в конце.

«От main» — важное уточнение: агент стартует с чистой рабочей версии, а не поверх чьих-то недоделок. Частые коммиты — твои точки возврата.

Проверить, где ты

На какой ветке я сейчас и есть ли незакоммиченные изменения?

Два вопроса, которые снимают девяносто процентов путаницы. Задавай их перед любым переключением.

Не понравился результат

Оставь ветку feature/pay как есть, переключись на main и покажи, что там сейчас.

Ничего не удаляем и не откатываем. Просто уходим на рабочую версию — а неудачная попытка остаётся лежать в своём снимке на случай, если из неё что-то пригодится.

Про имена веток

Имена вроде feature/pay или fix/cart — просто соглашение, Git на слэш никак не реагирует. Но привычка называть ветки осмысленно окупается уже на третьей: через неделю ты не вспомнишь, что было в ветке test2.

Поиграй сам

Теперь, когда история пройдена, вот свободная песочница. Никакого сценария, ничего не сломать. Внизу пишется команда, которую ты по сути отдал.

Попробуй повторить историю из демо по памяти: сделай коммит, заведи ветку, закоммить в ней, вернись на main и закоммить ещё раз. Обрати внимание, какая бирка едет, а какая стоит.

Проверь себя

Вопросы не про определения, а про ситуации — «что будет, если». Именно так это понадобится в работе.