Git — «машина времени» для кода: фиксирует версии, даёт откатиться и вести параллельные направления (ветки). Работает с любым облаком (GitHub / GitLab / Gitea / Bitbucket). Команды ниже сверены с официальным
git-scm.com.
🧭 Картина целиком
Без Git ты живёшь в страхе: «сейчас что-то поправлю — и сломаю то, что работало». С Git каждая фиксация (коммит) — это сохранёнка в игре: можно вернуться к любой. На выходе ты получаешь: историю всех версий, кнопку «откатить», возможность вести несколько направлений одновременно (ветки) и переносить код между своим компом, сервером и коллегами через облако (push/pull).
Три «места», где живёт твой код, — это вся суть Git:
- Рабочая папка — файлы, которые ты редактируешь прямо сейчас.
- Индекс (staging) — «корзина» с тем, что войдёт в следующий коммит (
git addкладёт сюда). - История (репозиторий) — зафиксированные коммиты (
git commitзаписывает сюда).
💡 Поставь Git, если ещё нет: macOS —
brew install git(или Xcode Command Line Tools), Windows — установщик с git-scm.com (Git Bash), Ubuntu —sudo apt install git. Проверка:git --version→ должно показать версию.
Шаг 1. Один раз представиться (имя/почта в коммитах)
Что делаем: говорим Git, кто автор коммитов. Без этого первый commit ругнётся.
git config --global user.name "Anton Laskov"
git config --global user.email "ты@почта.ru"
git config --global init.defaultBranch main # чтобы новая ветка звалась main, а не master
Как понять, что ОК: git config --global --list показывает твои user.name и user.email.
Частые ошибки:
- Поставил без
--global— настройка применится только к текущему репозиторию (иногда это и нужно, но для старта ставь глобально). - Почта не та, что на GitHub → коммиты не «склеятся» с твоим профилем (аватарка не подтянется). Возьми ту же почту, что в аккаунте.
Шаг 2. Завести репозиторий (один раз, в папке проекта)
Что делаем: превращаем обычную папку в Git-репозиторий и делаем первый коммит.
cd путь/к/проекту
git init # создаст скрытую папку .git/
git add . # положить все файлы в индекс
git commit -m "Первый коммит: старт проекта"
Как понять, что ОК: после git init — строка Initialized empty Git repository in .../.git/. После git commit — 1 file(s) changed (или сколько у тебя файлов).
Теперь подключи облако. Создай пустой репозиторий на GitHub (без README, чтобы не было конфликта) → подключи и отправь:
git remote add origin https://github.com/ТВОЙ_ЛОГИН/мой-проект.git
git branch -M main # назвать текущую ветку main
git push -u origin main # отправить и запомнить связь (-u)
Как понять, что ОК: в браузере обнови страницу репозитория на GitHub — там появились твои файлы.
Частые ошибки:
fatal: not a git repository— ты не в той папке или забылgit init.remote origin already exists— origin уже задан; поменять адрес:git remote set-url origin <URL>.Updates were rejectedпри первом push — на GitHub уже есть коммит (например, авто-README). Решение:git pull --rebase origin main, потом сноваgit push.- Просит логин/пароль и не пускает — GitHub давно не принимает пароль по HTTPS. Используй Personal Access Token вместо пароля (Settings → Developer settings → Tokens) или SSH-ключ.
Шаг 3. Минимальный набор на каждый день
Что делаем: базовый цикл «посмотрел → подготовил → зафиксировал → отправил».
git status # что изменилось (твой главный друг — смотри часто)
git add . # подготовить ВСЕ изменения (или git add файл.js — точечно)
git commit -m "понятное описание что сделал"
git push # отправить в облако
git pull # забрать изменения (с другого устройства/от коллег)
git log --oneline # короткая история коммитов (q — выйти)
Как понять, что ОК: после commit — git status говорит nothing to commit, working tree clean. После push — git status пишет Your branch is up to date with origin/main.
Частые ошибки:
- Коммит без
-mоткрывает текстовый редактор vim — новичка это пугает. Выход без правок: нажмиEsc, набери:q!, Enter. На будущее всегда пиши-m "...". - Описание коммита «фикс», «апдейт», «ещё раз» — через неделю не вспомнишь, что это. Пиши по делу: «Добавил валидацию формы входа».
- Забыл
git addперед commit → коммит пустой/без нужного файла. Сначалаadd, потомcommit(илиgit commit -a— закоммитит уже отслеживаемые изменённые файлы, но НЕ новые).
Шаг 4. Ветки (соло и команда)
Что делаем: изолируем каждую задачу в своей ветке, чтобы не ломать стабильный код.
main— стабильное (то, что «в проде»). Напрямую сюда не пишем.feature/<задача>— отдельная ветка под каждую фичу/правку.
git switch -c feature/login # создать ветку и перейти в неё (старый синоним: git checkout -b)
# ...правишь код...
git add . && git commit -m "Вход по почте"
git push -u origin feature/login
# готово и проверено → вернуться на main и влить:
git switch main
git merge feature/login
Как понять, что ОК: git branch показывает список веток, звёздочка * — на какой ты сейчас. После merge твои изменения появились в main.
Частые ошибки:
- Делаешь правки, забыв переключиться → коммит улетел не в ту ветку. Перед работой проверь
git branch. merge conflict(конфликт слияния) — два изменения в одной строке. Git пометит места<<<<<<<,=======,>>>>>>>; выбери правильный вариант, удали маркеры, затемgit add файлиgit commit. Не паникуй — это нормальная часть работы (см. промт-спасалку).
Шаг 5. Откат — если что-то сломал
Что делаем: возвращаем код назад. Главное — понять, ЧТО именно откатываешь.
git restore <файл> # вернуть один файл к последнему коммиту (несохранённые правки пропадут)
git restore --staged <файл> # убрать файл из git add (сами правки остаются)
git restore . # откатить ВСЕ несохранённые правки (осторожно!)
git revert <hash> # безопасно отменить уже сделанный коммит — НОВЫМ коммитом
git log --oneline # взять короткий хэш нужного коммита (напр. a5eec9d)
Как понять, что ОК: git status показывает, что файл вернулся в исходное состояние. После revert в git log появляется новый коммит «Revert ...».
Частые ошибки:
- Путают
restore(отменить незакоммиченные правки) иrevert(отменить уже сделанный коммит). Сначала гляньgit status/git log. git restore .сотрёт несохранённую работу без корзины. Если не уверен — сначалаgit stash(спрячет правки, потом вернёшь черезgit stash pop).
🧠 Для сеньора
resetvsrevert:revertбезопасен для опубликованной истории (новый коммит);reset --soft/--mixed/--hardпереписывает историю — только для локальных, ещё не запушенных коммитов.- Восстановление «потерянного»: почти всё чинится через
git reflog— он помнит, где была HEAD, даже после «жёсткого» reset. Удалённую ветку поднимешь из reflog по хэшу. - Чистая история:
git rebase -iдля squash/fixup перед PR,git commit --amendдля правки последнего коммита (только до push). Conventional Commits + автоматический CHANGELOG. - Гигиена: защищённый
main(PR + ревью + required checks),git switchвместо перегруженногоcheckout,.gitignoreпод стек (см. github/gitignore), хуки через pre-commit (линт/секрет-сканер до коммита). - Большие файлы: не клади бинари/датасеты в git — используй Git LFS или внешнее хранилище.
⚠️ Предупреждения (необратимое / безопасность)
- Секреты (пароли/ключи/токены) — НИКОГДА в git. Только в
.env, и.envобязательно в.gitignore. Утёкший в публичный репозиторий ключ = взлом, и удалить его из истории постфактум — боль (нуженgit filter-repo+ ротация ключа). Лучше не допускать. git reset --hardиgit push --force— необратимы и могут стереть работу (твою или коллег). Перед ними сделай резервную ветку:git branch backup(мгновенный «снимок» текущего состояния).git clean -fdудаляет неотслеживаемые файлы с диска без корзины. Сначалаgit clean -nd(флаг-n— «показать, что удалится, но не удалять»).
🆘 Промт-спасалка
Я новичок в git, объясняй простыми словами и по шагам.
ЧТО Я ХОТЕЛ СДЕЛАТЬ: <напр. отменить последний коммит / слить ветку / вернуть удалённый файл>
ВОТ МОЁ СОСТОЯНИЕ:
<вставь вывод `git status`>
<вставь вывод `git log --oneline -5`>
ВОТ ОШИБКА/ЧТО ВИЖУ: <текст ошибки>
Что делать:
1) Объясни, что произошло и почему.
2) Дай точные команды, чтобы вернуть как было, НИЧЕГО не потеряв.
3) Если команда необратима (reset --hard, push --force, clean) — предупреди и сначала предложи бэкап-ветку.
4) В конце — как проверить, что всё встало на место.
💎 Глубина и ценность
- Git — это страховка от страха. Перестаёшь бояться экспериментировать: любую правку можно откатить. Это меняет сам способ работы — смелее пробуешь, быстрее учишься.
- Это пропуск в командную разработку. Весь мир кода (GitHub, open-source, любая IT-команда) живёт на Git и Pull Request’ах. Без него ты не вольёшься в проект; с ним — сразу «свой».
- Фундамент для всего остального. Деплой на сервер, CI/CD, вайб-кодинг с ИИ-агентом, перенос проекта между машинами — всё опирается на Git. 15 минут здесь окупаются годами.