qvib.pro
EN

Git за 15 минут

Для чего: перестать терять версии кода — init → commit → push → ветки → откат. Минимум команд, которые реально нужны каждый день.

бесплатно новичок

Git — «машина времени» для кода: фиксирует версии, даёт откатиться и вести параллельные направления (ветки). Работает с любым облаком (GitHub / GitLab / Gitea / Bitbucket). Команды ниже сверены с официальным git-scm.com.

🧭 Картина целиком

Без Git ты живёшь в страхе: «сейчас что-то поправлю — и сломаю то, что работало». С Git каждая фиксация (коммит) — это сохранёнка в игре: можно вернуться к любой. На выходе ты получаешь: историю всех версий, кнопку «откатить», возможность вести несколько направлений одновременно (ветки) и переносить код между своим компом, сервером и коллегами через облако (push/pull).

Три «места», где живёт твой код, — это вся суть Git:

  1. Рабочая папка — файлы, которые ты редактируешь прямо сейчас.
  2. Индекс (staging) — «корзина» с тем, что войдёт в следующий коммит (git add кладёт сюда).
  3. История (репозиторий) — зафиксированные коммиты (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 commit1 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 — выйти)

Как понять, что ОК: после commitgit status говорит nothing to commit, working tree clean. После pushgit 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).

🧠 Для сеньора

  • reset vs revert: 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 минут здесь окупаются годами.