Git: как это работает¶
Git — система контроля версий. Она отслеживает изменения в файлах и позволяет возвращаться к любому предыдущему состоянию, а также работать в команде без перезаписи чужих изменений.
Ключевые понятия¶
Репозиторий (repo) — папка проекта, за которой следит Git. Внутри создаётся
скрытая папка .git — там и хранится вся история.
Коммит (commit) — «снимок» состояния файлов в конкретный момент. Каждый коммит имеет уникальный ID (SHA), автора, дату и сообщение.
Индекс / staging area — промежуточная зона. Ты явно выбираешь, какие
изменения попадут в следующий коммит (git add), и только потом фиксируешь (git commit).
Remote — удалённый репозиторий (например, GitHub). Локальная копия и remote
синхронизируются через push / pull.
Базовые команды¶
```bash git status # что изменилось, что в staging git add <файл> # добавить файл в staging git add . # добавить всё изменённое git commit -m "message" # зафиксировать коммит git push # отправить коммиты на GitHub git pull # получить изменения с GitHub git log --oneline # история коммитов (коротко) Как выглядит типичный цикл
изменил файл → git add → git commit → git push ↑ ↓ staging area GitHub / remote Без git add изменение не попадёт в коммит. Без git push коммит останется только локально.
Ветки (branches) Ветка — это независимая линия разработки. По умолчанию ты работаешь в ветке main.
Зачем ветки нужны: можно делать эксперименты или новые фичи, не ломая рабочий main. Когда готово — ветку вливают (merge) обратно.
git branch # посмотреть все ветки git branch feature/dns # создать ветку git checkout feature/dns # переключиться на неё git checkout -b feature/dns # создать и сразу переключиться (короче) git checkout main # вернуться в main git merge feature/dns # влить ветку в main (находясь в main) Визуально:
main: A --- B --- E \ / feature: C-D A, B — коммиты в main. C, D — работа в ветке. E — merge.
.gitignore Файл .gitignore говорит Git, какие файлы игнорировать (не трекать). Например, в этом проекте игнорируются site/ (результат сборки) и .venv/ (зависимости Python) — их нет смысла хранить в репозитории, они генерируются локально.
Частые ошибки
Ситуация Что сделать
Закоммитил лишнее git revert