1. Завести сейф и поставить первую точку
Олег отодвигает Тёмин ноутбук к себе, открывает терминал в папке портала. Пальцы у него по клавишам бегают уверенно — сразу видно, что делал это тысячу раз.
— Значит так. Модель ты понял: main, ветка, коммит, откат. Теперь — каждое слово имеет свою команду. Смотри и записывай, я по одному разу показываю.
— Первое. Завести git в проекте. Один раз на проект, в самом начале.
$ git init
Initialized empty Git repository in /portal/.git/
— Всё, — говорит Олег. — Появилась скрытая папка .git, в ней git и хранит всю историю. Теперь он следит за проектом. Дальше — прежде чем что-то менять, надо осмотреться. Команда, которую я жму сто раз на дню:
$ git status
On branch main
No commits yet
Untracked files:
pages/
src/reward-flow.js
src/leaderboard.js
…
— status — это «где я и что вокруг», — поясняет Олег. — Сейчас он говорит: ветка main, коммитов ещё нет, а вот файлы, которые git видит, но пока не взял под присмотр — «untracked», неотслеживаемые. Запомни это слово, оно нам ещё аукнется. Привыкай status дёргать постоянно: перед каждым шагом глянул — где стоишь.
— Теперь ставим первую точку возврата — чистый портал, до всяких правок. Это два движения. Сначала сказать git, какие файлы брать под контроль, — командой add:
$ git add -A
— -A значит «все в текущей папке». Ты как бы складываешь файлы на стол перед фотографом. А теперь — сам снимок, коммит:
$ git commit -m "рабочий портал до правок"
[main (root-commit) a1b2c3d] рабочий портал до правок
3 files changed, 214 insertions(+)
Тёма тычет в строчку:
— А чего в кавычках?
— Подпись к точке коммита. — Олег кивает. — Чтоб через неделю понять, что это за момент. «Рабочий портал до правок» — вот я и вижу: сюда можно падать, тут всё цело. Без подписи коммит — как фотка без даты, потом гадаешь.
2. Отвести ветку и зафиксировать работу
— Дальше по модели — отдельная линия под задачу. Не лезем в main, отводим ветку:
$ git checkout -b fix-reward
Switched to a new branch 'fix-reward'
— «Переключился на новую ветку fix-reward», — читает Олег вслух. — Флаг -b значит «создай и сразу перейди». Теперь я стою в новой ветке, main — в стороне. Дёрну status — проверю:
$ git status
On branch fix-reward
nothing to commit, working tree clean
— Видишь — «на ветке fix-reward, чисто». Вот тут и работаешь. Наменял, попробовал — и, когда доволен, фиксируешь новой точкой. Те же два движения, add и commit:
$ git add -A
$ git commit -m "fix: начисление в reward-flow"
[fix-reward e4f5g6h] fix: начисление в reward-flow
1 file changed, 3 insertions(+), 1 deletion(-)
3. Посмотреть, что менялось, и откатить, если криво
— Перед тем как что-то принять — смотрим, что изменилось. Команда diff:
$ git diff
reward-flow.js
+ const reward = base * multiplier;
- const reward = base;
— Зелёное — что добавил, красное — что убрал, — тычет Олег. — Прежде чем фиксировать, глазами прошёлся: то ли поменялось, что хотел?
— А если наворотил лишнего? — уже въезжает Тёма.
— Тогда — откат. Возврат ветки к последней сохраненной точке. Вот команда, но с ней поаккуратнее, она с зубами:
$ git reset --hard HEAD
HEAD is now at a1b2c3d рабочий портал до правок
— reset --hard сносит всё, что наворочено после точки, и возвращает файлы как были, — Олег делает серьёзное лицо. — HEAD — это «последняя зафиксированная точка, где я сейчас стою». Откатило — и как отрезало. Мощная штука, поэтому запомни: --hard не спрашивает, сносит молча. Дважды подумай, прежде чем жать.
— А хочешь глянуть все свои точки разом — вот:
$ git log --oneline
e4f5g6h fix: начисление в reward-flow
a1b2c3d рабочий портал до правок
— log — это лента твоих коммитов, сверху свежие. Вся история проекта как на ладони: вот сюда могу вернуться, и вот сюда. Помнишь, ты десять папок финал глазами перебирал? Вот это оно, только честно и одной строкой.
Тёма исписал полблокнота. init, status, add, commit, checkout -b, diff, reset --hard, log — восемь команд, и у каждой ещё флажки эти, -A, -m, -b, --hard, --oneline. Голова уже гудит.
— Дядь Олег, а это всё… наизусть надо? — осторожно спрашивает он.
— Нас так учили — наизусть, — Олег пожимает плечами, забирает кружку. — Пальцы сами должны помнить. Я эти команды двадцать лет из головы набираю. Ну а ты уж как знаешь — молодёжь, у вас там свои фокусы. Моё дело — показать, как оно устроено по-настоящему. — И, довольный, уходит к себе.
Тёма смотрит на исписанный блокнот, и восторг «теперь я умею в git» быстро сменяется тоской. Восемь команд. Флаги. Он и половину уже путает: -A это где, --hard это что сносит… С этим тоскливым блокнотом он и разворачивается к чату с Лёхой.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ