1. Команди git зубрити не потрібно
— Льохо, — Тьома махає блокнотом. — Дід мені тут вісім команд надиктував, із прапорцями. Каже: напамʼять. Я це в житті не запамʼятаю — git reset --hard, git checkout -b, де який прапорець… У мене від одного вигляду голова пухне.
— А давай подивимося, хто їх узагалі має вводити, — Льоха хмикає, уперше за день майже весело. — Дід правий щодо моделі — золото тобі дав. А ось щодо «напамʼять» — це він із власної молодості, тоді інакше було не можна. Тобі заучувати не треба. Відкрий агента й попроси словами: «заведи для проєкту сейф». Просто словами, не командою — проханням.
Тьома пробує. Пише в чат людське «заведи в проєкті git, щоб можна було відкотитися». І агент сам, у терміналі, виконує рівно те, що Олег набирав руками:
● git init
Ініціалізовано порожній Git-репозиторій у /portal/.git/
— Ось і все, сейф створено, — каже Льоха. — Та сама команда, яку дід набирав пальцями. Тільки він — із голови, а ти — словами. Зверни увагу: git init набрав агент, не ти. Ти сказав, чого хочеш, — він перевів це в команду.
Тьома коситься на рядок у терміналі:
— Тобто весь блокнот діда я можу… не вчити?
— Не будеш. — Льоха хитає головою. — Усі ці команди виконує сам ШІ-агент через термінал. Жодних окремих «git-кнопок» у Claude Code немає: git для нього — звичайний інструмент, як і все, чим він у тебе в терміналі орудує. Тобі треба знати модель — main, гілка, точка, відкат, — а перевести її в команди попросиш словами. Дідів синтаксис із прапорцями — його турбота, не твоя.
Тьома помітно видихає. Найстрашніше — що доведеться заучувати блокнот із прапорцями — відпало.
— Але модель діда тримай міцно, — додає Льоха. — Прохання словами працює лише тоді, коли ти розумієш, ЩО просиш. Скажеш туманно — агент і набере туманно. Дід тобі дав розуміння, я даю зручність. Разом — сила.
Сейф створено, перша точка (робочий портал до правок) уже стоїть — Олег її поставив, поки показував команди. Тьома її перевіряти не поліз, повірив дідові.
2. Бойовий прохід: гілка → правка → відкат, main неушкоджений
— Ну а тепер, — підганяє Льоха, — захистимо твою правку reward-flow по-дорослому, крок за кроком. Усе, що ти дописав у бланку, зараз стане справжніми діями. І зверни увагу на різницю з дідом: він команди набирав сам, а ти говориш словами, а команду під капотом виконує агент.
Крок 1. Ізолюємо роботу в гілці — щоб main залишився недоторканим. Тьома пише агенту словами:
Перед завданням створи гілку fix-reward і працюй у ній, main не чіпай.
Агент перекладає прохання в команду і виконує:
● git checkout -b fix-reward
Перемкнуто на нову гілку 'fix-reward'
— Усе, — коментує Льоха. — Термінал так і написав: «перемкнуто на нову гілку fix-reward». Тепер агент порається в ній. Що б він там не накоїв — твій робочий main стоїть осторонь і навіть не в курсі.
Крок 2. Даємо правку — і дивимося, що агент змінив, ДО прийняття/коміту. Агент наробив змін у reward-flow. Але перш ніж сказати «прийнято», Тьома відкриває перегляд змін:
/diff
На екрані — построкова картина правки. Зеленим позначено те, що агент додав, червоним — те, що прибрав:
reward-flow.js
+ const reward = base * multiplier; // рядки, які агент додав
- const reward = base;
leaderboard.js
+ sortByScore(players); // ← а це вже зайве
Тьома вдивляється — і насуплюється.
— Слухай, а чого він тут… він же не тільки нарахування зачепив. Оце, у leaderboard.js, — воно звідки? Я про лідерборд ані слова не казав.
— Ось для цього і дивляться, — киває Льоха. — Прохід вийшов кривий: агент зачепив сусідню ділянку. Добре, що глянув ДО, а не прийняв наосліп. До речі, ці самі правки видно і прямо у відкритому файлі в редакторі — там, де агент змінював, рядки підсвічені так само. Диф і файл показують одне й те саме, дивіться де зручніше.
Крок 3. Відкочуємо гілку до чистої точки — криве зникає. Тьома не лізе вичищати leaderboard.js руками. Раз прохід кривий — просить скинути гілку цілком:
Скинь гілку до останньої зафіксованої точки, почнемо заново.
Агент перекладає це в команду відкату:
● git reset --hard HEAD
HEAD тепер на a1b2c3d робочий портал до правок
Термінал підтвердив: гілка повернулася до тієї самої точки, яку ви зафіксували на початку. Увесь кривий прохід — і правильне нарахування, і зайвий хвіст у лідерборді — стерто разом, ніби нічого й не було.
Крок 4. Чистовий прохід — і фіксуємо точку повернення. Тепер Тьома дає правку заново, уже з жорсткішим ТЗ («чіпати тільки нарахування, сусіднього не торкатися»). Цього разу /diff показує лише reward-flow.js, нічого зайвого. Тьома приймає зміни й просить зафіксувати точку:
Зафіксуй правку: нарахування в reward-flow.
● git commit -m "fix: нарахування в reward-flow"
[fix-reward e4f5g6h] fix: нарахування в reward-flow
— І зверни увагу на головне, — Льоха підбиває підсумок. — Увесь цей час твій main був недоторканим. Ти зламав у гілці, відкотив гілку, переробив, поставив точку — і робочий портал жодного разу не постраждав. Ось воно, «зламав → відкотив → ніби й не було». Тільки тепер не на рівні розмови, а на рівні самого репозиторію. Глибше. Надійніше.
3. Ті самі команди простими словами
— Погоди, — Тьома гортає назад термінал. — Я дивлюся, за весь прохід я сам не набрав ані однієї команди з блокнота. Я говорив словами, а checkout та reset зʼявлялися самі.
— Оце і є головна навичка роботи зі ШІ, — Льоха пожвавлюється. — Не команди. Як попросити. У діда в блокноті — ліва колонка в твоїй голові: main, гілка, точка, відкат. А праву колонку, синтаксис із прапорцями, тепер тримає агент. Давай я перепишу дідовий блокнот на людську мову — щоб у тебе був під рукою.
Він загинає пальці — на кожну дію та сама команда, яку Олег набирав руками, тільки тепер це просто прохання словами:
- Завести сейф (один раз на проєкт): «заведи в проєкті git» → агент робить git init.
- Зафіксувати точку повернення: «зафіксуй поточний стан» або «збережи точку, тут усе працює» → агент робить git commit.
- Винести роботу в окрему гілку: «створи гілку під цю правку, main не чіпай» → агент робить git checkout -b.
- Подивитися, що змінилося, до прийняття: тут навіть простіше — у Claude Code своя команда /diff, набереш сам. Це той самий дідовий git diff, тільки під рукою в сесії, інтерактивний.
- Відкотити кривий прохід цілком: «скинь гілку до останньої зафіксованої точки» → агент робить git reset --hard.
— Зверни увагу на закономірність, — каже Льоха. — Ліворуч — те, що ви хочете за моделлю. Праворуч — команда, яку не треба знати напамʼять. Ваша половина — ліва. Ви формулюєте намір, а переклад у синтаксис бере на себе агент. Чим точніше ви скажете, чого хочете, тим менше він наплутає.
— Тобто якщо я скажу туманно — він і зробить туманно, — ловить Тьома.
— Саме так. «Слухай, ну зроби там із гілками нормально» — погане прохання, агент здогадується навмання. «Створи гілку fix-reward, працюй лише в ній» — добре, тут гадати нічого. Той самий навик, що ти відпрацьовував із ТЗ: сказав чітко — отримав чіткий результат.
4. Навіщо саме диф, якщо main і так захищений
— А ось цей диф, — Тьома не вгамовується. — Я ж тепер у гілці, main захищений. Може, і дивитися не треба? Накосячить — відкотю, і все.
— Можна і так, — Льоха не сперечається одразу. — Але дивись, у чому різниця. Відкат — це вже після того, як накосячив. А диф — це до того, як ви прийняли. Це ваш перший барʼєр між «агент запропонував» і «потрапило в проєкт». Звичка проста: перш ніж сказати «ок, приймаю», гляньте, що саме він змінив. Що додав, що прибрав.
Він трохи тисне:
— Ти сам щойно в бойовому проході спіткнувся на тому, що агент торкнувся зайвого. Якби ти прийняв наосліп — це зайве поїхало б у гілку, потім, може, і в main. А ти глянув диф — і зловив. Відкат рятує від записаного. А диф ловить ще до запису. Це різні моменти.
— Тобто це мене відучує кивати «роби» не дивлячись.
— Саме так. І дивитися — це не «пробігти очима для галочки». — Льоха повертається до того дифу. — Диф показує вам рівно дві речі: що агент додав і що прибрав. Зелене і червоне, рядок за рядком. Ваше завдання на цьому етапі — не оцінювати, чи добрий код (це справа Сани), а лише звірити: усе, що він зачепив, — із вашої задачі? Ви просили полагодити нарахування. Отже, у дифі має бути лише нарахування. Зʼявилося ще щось, з іншого файла, з іншої зони, — ось і дзвіночок.
— Як із тим лідербордом, — киває Тьома. — Я про нього не просив, а він у дифі сплив.
— Точно. Ви не розбиралися, чи правильно агент відсортував лідерборд. Ви просто побачили: цього в задачі не було — і вже насторожилися. Ось і весь навик на сьогодні. Не «оцінити якість кожного рядка», а «звірити список зміненого зі списком того, що просили». Одне коротке порівняння перед кожним прийняттям.
Він робить акцент:
— Поки — тільки це: подивитися, що змінюється, і зловити чуже. Глибокий розбір — «а це зайве, а це небезпечне, а це агент тихцем переписав» — буде пізніше, окремо. Зараз базовий рефлекс простий: не приймайте код, не подивившись, чи він із вашої задачі.
5. Чому /rewind не врятував тієї ночі
Тьома відкидається і нарешті ставить запитання, яке мучило його від ранку:
— Слухай, то чому та ніч зламалася? У мене ж був /rewind. Я в нього вдарив — а він не врятував. Тепер у мене git. А в чому різниця між ними? Це ж обидва «відкат».
— Хороше запитання, давно пора. — Льоха розкладає на пальцях. — У вас тепер три різні страхувальні сітки, і вони не дублюють одна одну. Вони працюють у різні моменти й на різних поверхах. Не змішуйте.
— Перша — диф. Ловить помилку до того, як код увійшов у проєкт. Барʼєр на вході.
— Друга — /rewind. Відкочує усередині сесії, просто в живій розмові. Поки ви тут балакаєте з агентом, він відмотує назад правки поточного проходу.
— Третя — git. Повертає вже записане на диск. Гілка, коміт — найглибший поверх. Працює, навіть коли розмова закінчилася і агент узагалі нічого не памʼятає.
Він зупиняється на головному:
— А тепер дивіться, що було тієї ночі. Сесія відпрацювала, ноут заснув, розмова закрилася. Правки давно лягли на диск. І ви бʼєте по /rewind — по сітці, яка живе в сесії. А сесії вже немає, відмотувати нічого. Кнопка не дотягнулася до диска не тому, що погана. Вона просто з іншого поверху. Вона ніколи й не мала тягнути назад увесь репозиторій — для цього є git, нижній поверх. А git тієї ночі у вас не був побудований.
Тьома мовчить. Рятувальне коло з діркою на третьому рівні стає на місце остаточно. Діра — це не поломка кола. Просто коло не може зробити роботу якоря. Різні речі, різні поверхи.
— Тобто мені потрібні всі три, — повільно каже він. — Не одна. Диф — на вході, rewind — у розмові, git — на диску.
— Усі три. Кожна на своєму поверсі. Тієї ночі у вас був лише середній, а провалилися ви на нижньому, де було порожньо.
6. Чесна примітка, щоб не було сюрпризів
— І одна чесна дрібниця наприкінці, — Льоха не дає піти в казку. — Про безпеку відкату. git reset --hard — команда з характером: зносить незафіксоване без запиту. І знайте одразу: чарівного «git-запобіжника», який сам спіймає вас за руку саме на ній, у Claude Code немає — не сподівайтеся на нього. Тримає вас інше, те, що ви вже знаєте: звичайне перепитування перед дією агента. Перш ніж виконати в терміналі щось руйнівне, агент у звичайному режимі питає дозвіл — точно так само, як на правки файлів. Оце перепитування і є ваша страховка: побачили git reset --hard у запиті на підтвердження — пригальмуйте на секунду і подумайте, чи справді скидаєте те, що не шкода. Окремої git-няні зверху немає, є ви і ваше «дозволяю».
— І останнє. Назви команд і точний вигляд екрана з часом можуть трохи змінюватися. Дід їх двадцять років тому заучував — і половина відтоді трохи інакше пишеться. Тому вам важливіше тримати модель — ізоляцію в гілці, точку повернення, відкат, — а не конкретні кнопки. Модель не застаріє, а синтаксис нехай агент підставляє свіжий.
Тьома підсумовує сам:
— Коротше. Сейф — це git. Гілка, щоб агент порався осторонь від робочого. Диф, щоб глянути до прийняття. Коміт — чесна точка на диску. Відкат — повернути гілку до точки, ніби й не було. І все це робить агент, я тільки кажу словами. Три сітки на трьох поверхах, потрібні всі.
— Ось тепер, — підсумовує Льоха, — можна пускати агента в reward-flow по-справжньому. Сейф зібрано.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ