# Git — Основные понятия и как работает

Эта страница объясняет базовые принципы работы Git и ключевые термины системы контроля версий. Здесь разобрано, что такое репозиторий, коммит, ветки и как Git хранит историю изменений. Материал рассчитан на начинающих и помогает понять **как устроена модель Git**, что значительно упрощает дальнейшую работу с командами.

---

## Что такое Git

**Git** — это распределённая система контроля версий (Version Control System, VCS).

Она позволяет:

* хранить историю изменений проекта
* работать нескольким разработчикам одновременно
* возвращаться к предыдущим версиям кода
* создавать параллельные версии разработки (ветки)

Git используется практически во всех современных проектах разработки.

---

## Что такое Gitea

**Gitea** — это сервер для хранения Git-репозиториев.

Он выполняет функции:

* хранения репозиториев
* управления доступом разработчиков
* совместной работы над кодом
* просмотра истории изменений через веб-интерфейс

В нашей инфраструктуре Gitea доступен по адресу:

```
https://git.ext.flamy.studio/
```

Через него происходит:

* хранение проектов
* создание репозиториев
* работа с ветками
* Pull Request и code review

---

## Основные понятия Git

Чтобы работать с Git, важно понимать несколько базовых терминов.

---

### Репозиторий (Repository)

**Репозиторий** — это хранилище проекта и всей истории его изменений.

Он содержит:

* исходный код
* историю изменений
* ветки проекта

Репозиторий может быть:

| Тип               | Описание                       |
| ----------------- | ------------------------------ |
| Local repository  | копия проекта на компьютере    |
| Remote repository | репозиторий на сервере (Gitea) |

---

### Commit

**Commit** — это сохранённое изменение проекта.

Каждый commit содержит:

* изменения файлов
* автора изменений
* дату
* сообщение коммита

Пример сообщения коммита:

```
Add login validation
```

История проекта состоит из последовательности commit-ов.

---

### Branch (ветка)

**Branch** — это отдельная линия разработки.

Ветки позволяют:

* работать над новыми функциями
* исправлять ошибки
* экспериментировать с кодом

Пример структуры веток:

```
main
 ├─ feature/login
 └─ bugfix/header
```

---

### Remote

**Remote** — это удалённый репозиторий.

Чаще всего используется remote с именем:

```
origin
```

Пример:

```
origin → https://git.ext.flamy.studio/user/project.git
```

---

## Как Git хранит изменения

Git не сохраняет просто файлы — он хранит **снимки состояния проекта**.

Каждый commit — это состояние всех файлов на момент сохранения.

Пример:

```
Commit A → начальное состояние
Commit B → добавлен файл login.js
Commit C → исправлена ошибка
```

Это позволяет:

* смотреть историю изменений
* сравнивать версии
* откатывать проект назад

---

## Модель работы Git

Очень важно понимать **как происходит сохранение изменений**.

Git использует три области:

```
Working Directory
        ↓
Staging Area
        ↓
Repository
```

---

### Working Directory

Это файлы проекта на вашем компьютере.

Здесь вы:

* редактируете код
* добавляете файлы
* удаляете файлы

Git отслеживает изменения, но **ещё не сохраняет их в историю**.

---

### Staging Area

Staging area — это промежуточная зона перед commit.

Сюда добавляются изменения, которые войдут в следующий commit.

Команда:

```bash id="n0staz"
git add
```

---

### Repository

Repository — это история commit-ов.

Когда выполняется:

```bash id="p7dzos"
git commit
```

изменения сохраняются в истории проекта.

---

## Визуальная схема работы Git

```
Редактирование файлов
        ↓
git add
        ↓
Staging Area
        ↓
git commit
        ↓
История репозитория
```

---

## Пример работы

Предположим, разработчик изменил файл:

```
login.js
```

Git покажет изменения:

```bash id="1wrm20"
git status
```

Добавить файл в staging:

```bash id="uaxqmy"
git add login.js
```

Создать commit:

```bash id="g8imau"
git commit -m "Add login validation"
```

Теперь изменения сохранены в истории проекта.

---

## Локальный и удалённый репозиторий

Работа Git обычно происходит в двух местах:

```
локальный компьютер
        ↓
Git сервер (Gitea)
```

Процесс работы:

```
edit → commit → push
```

---

### Push

Отправляет изменения на сервер.

```bash id="r4bb1h"
git push
```

---

### Pull

Получает изменения с сервера.

```bash id="0r8sps"
git pull
```

---

## Почему Git удобен для командной работы

Git позволяет нескольким разработчикам работать над одним проектом одновременно.

Например:

```
Developer A → работает над login
Developer B → работает над profile
```

Каждый разработчик работает в своей ветке, а затем изменения объединяются.

---

## Что важно запомнить

Git работает по простой модели:

```
изменение файлов
       ↓
git add
       ↓
git commit
       ↓
git push
```

Эта последовательность является **основным рабочим процессом Git**.

---

## Краткая памятка

```
Repository  → хранилище проекта
Commit      → сохранённое изменение
Branch      → линия разработки
Remote      → удалённый репозиторий
Working Dir → файлы проекта
Staging     → подготовка commit
```

---

## Итог

Git хранит историю проекта в виде последовательности commit-ов и позволяет разработчикам безопасно работать с кодом.

Понимание базовой модели Git (Working Directory → Staging → Commit) является основой дальнейшей работы с системой контроля версий.