Перейти к содержанию

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 — создаёт новый коммит, отменяющий старый Хочу отменить git add git restore --staged <файл> Забыл что-то добавить в последний коммит git add <файл> && git commit --amend (только если ещё не пушил) Хочу посмотреть что изменилось git diff