Система контроля версий
для тех, кто «вообще не понимает, зачем»
Это короткая, но глубокая «живая» инструкция: без жаргона и «магии». Цель — чтобы вы осознали, зачем Git нужен, а не просто выучили команды.
Зачем вообще нужна система контроля версий?
Спасает от потерь. Любое изменение можно отменить. Файлы не «ломаются навсегда».
Позволяет работать параллельно. Несколько людей меняют один проект — и не мешают друг другу.
Оставляет следы решений. Каждое изменение сопровождают сообщение «что сделали и зачем».
Ускоряет проверку кода. Легко показать изменения, обсудить, принять или откатить.
Помогает искать баги. Можно быстро найти, в каком изменении всё сломалось.
Как устроена работа с Git (просто и честно)
Вам достаточно запомнить три «коробки»:
Рабочая папка — обычные файлы на диске.
Промежуточная корзина (её ещё называют «индекс») — список того, что войдёт в следующее сохранение.
История — цепочка сохранений (их называют «коммитами»).
Поток такой: изменили файлы → выбрали, что именно сохранить → сделали сохранение → при необходимости отправили на сервер.
Установка и первичная настройка (один раз)
Установите Git с официального сайта или пакетного менеджера.
Укажите имя и почту — они будут в подписях к изменениям.
Начало: создать или склонировать проект
Вариант А. Начать с нуля
Появится скрытая папка .git
— там вся история и служебные данные.
Вариант Б. Взять готовый проект с сервера
Вы получаете полную копию проекта со всей историей и настроенным подключением к серверу под именем origin
.
Первое сохранение: «добавить → сохранить → отправить»
Посмотреть статус:
Выбрать, что включить в сохранение:
Сделать сохранение с понятным сообщением:
Связать проект с сервером и отправить:
Повседневные команды, которые реально нужны
Посмотреть историю «в одну строку»:
git log --oneline --graph --decorateПосмотреть, что поменяли в файлах:
git diff # изменения в рабочих файлах git diff --staged # изменения, уже добавленные в «корзину»Передумали добавлять файл в «корзину»:
git restore --staged path/to/file
Работа в ветках: безопасные «песочницы»
Ветка — это отдельная линия работы. Нужна новая фича → делаем ветку, не трогаем основную.
Слить изменения в основную:
Удалить локальную ветку после слияния:
Обновлять свою ветку от основной: «merge» против «rebase»
merge — просто соединяет истории, оставляя «ветвление» видимым; иногда появляется «коммит слияния».
rebase — как будто переносит ваши изменения поверх другой ветки, делая историю прямой.
Обновить фичу на основе свежего main
с «прямой» историей:
Если появились конфликты — решите их в файлах, затем:
Синхронизация с сервером: забрать, слить, отправить
Конфликты: не страшно
Конфликт — Git не смог объединить изменения автоматически. В файле появятся маркеры:
Что делать:
Откройте файл, оставьте нужное (или вручную объедините), удалите маркеры.
Проверьте, что всё собирается и тесты зелёные.
Завершите операцию:
.gitignore: не засоряйте историю мусором
Файл .gitignore
в корне проекта говорит Git, какие файлы не отслеживать: логи, артефакты сборки, секреты и т.п.
Пример:
Если файл уже попал в историю, просто добавления в .gitignore
мало — надо «отцепить» его от отслеживания:
.gitattributes: одинаковые переводы строк и типы файлов
Чтобы в репозитории всегда хранились «чистые» текстовые файлы с одинаковым переводом строк:
Это избавляет от «грязных диффов» между Windows/macOS/Linux и стабилизирует сборки.
Пишем внятные сообщения к изменениям
Хорошее сообщение отвечает на «что» и «почему». Структура: короткий заголовок (до ~50 символов), затем — детали при необходимости.
Пример:
Временная полка (stash): отложить черновик
Когда надо «срочно переключиться» и нет времени на полноценное сохранение:
Типовые способы работы в команде
Фича-ветка → запрос на слияние → проверка → в основную ветку. Короткая ветка, небольшие сохранения, обсуждение, автоматические проверки.
Срочный горячий фикс. Ветка от основной, минимальные изменения, быстрые проверки, релиз.
Релизы с тегами. Отмечайте стабильные версии тегами вроде
v1.2.3
, автоматизируйте сборки.
Безопасность и большие файлы
Не храните в репозитории ключи, пароли, токены. Используйте переменные окружения и менеджеры секретов.
Для больших бинарников (дизайн, видео) — отдельный механизм хранения больших файлов:
Диагностика: когда «всё пошло не так»
Посмотреть, что вообще происходит:
git status git log --oneline --graph git diffВернуть файл к последнему сохранению:
git restore path/to/fileОткатить подготовку к сохранению:
git restore --staged path/to/file«Паническая кнопка» (стирает несохранённые правки в рабочей папке — аккуратно!):
git reset --hard
Частые ошибки новичков (и как их избежать)
Слишком большие сохранения. Делите изменения на логические куски.
Плохие сообщения. Пишите, что и зачем сделали; избегайте «fixed», «update».
Секреты в истории. Настройте
.gitignore
и.gitattributes
с первого дня, держите.env
вне репозитория и используйте шаблон.env.example
.Работа напрямую в основной ветке. Делайте фичи в ветках — так безопаснее и чище.
Слепой
pull
. Сначалаfetch
, посмотрите, что пришло, затем объединяйте.
Мини-тренажёр: сделайте «первый цикл» целиком
Создайте папку проекта и инициализируйте Git.
Добавьте файл
README.md
и сделайте первое сохранение.Настройте
.gitignore
(исключитеnode_modules
,dist
, логи).Создайте ветку
feature/greeting
, добавьте небольшой код и сохраните.Слейте ветку в основную, отправьте всё на свой удалённый репозиторий.
Подсказки:
Короткая шпаргалка
Создать репозиторий:
git init
Склонировать:
git clone URL
Статус:
git status
Добавить изменения:
git add .
/git add файл
Сохранить:
git commit -m "сообщение"
Ветки:
git switch -c имя
/git switch имя
/git branch -d имя
Объединить:
git merge другая_ветка
/ «выпрямить» историю:git rebase ветка
Синхронизация:
git fetch
/git pull
/git push
История:
git log --oneline --graph
Временная полка:
git stash push
/git stash pop
Если хочешь, адаптирую это под конкретный стек (например, Node/NestJS с примерами .gitignore
, .gitattributes
, шаблоном сообщений коммитов и базовой интеграцией в GitHub Actions).