---
description: Додати всі зміни до індексу, створити коміт та відправити на віддалений сервер (використовуйте з обережністю)
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git push:*), Bash(git diff:*), Bash(git log:*), Bash(git pull:*)
---

# Коміт та Push усього

⚠️ **УВАГА**: Додає ВСІ зміни до індексу, створює коміт та відправляє на віддалений сервер. Використовуйте лише коли впевнені, що всі зміни належать разом.

## Робочий процес

### 1. Аналіз змін
Запустити паралельно:
- `git status` — показати змінені/додані/видалені/невідстежувані файли
- `git diff --stat` — показати статистику змін
- `git log -1 --oneline` — показати останній коміт для стилю повідомлення

### 2. Перевірки безпеки

**❌ ЗУПИНИТИ та ПОПЕРЕДИТИ при виявленні:**
- Секрети: `.env*`, `*.key`, `*.pem`, `credentials.json`, `secrets.yaml`, `id_rsa`, `*.p12`, `*.pfx`, `*.cer`
- API-ключі: Будь-які змінні `*_API_KEY`, `*_SECRET`, `*_TOKEN` з реальними значеннями (не заповнювачі типу `your-api-key`, `xxx`, `placeholder`)
- Великі файли: `>10MB` без Git LFS
- Артефакти збірки: `node_modules/`, `dist/`, `build/`, `__pycache__/`, `*.pyc`, `.venv/`
- Тимчасові файли: `.DS_Store`, `thumbs.db`, `*.swp`, `*.tmp`

**Валідація API-ключів:**
Перевірити змінені файли на патерни:
```bash
OPENAI_API_KEY=sk-proj-xxxxx  # ❌ Виявлено реальний ключ!
AWS_SECRET_KEY=AKIA...         # ❌ Виявлено реальний ключ!
STRIPE_API_KEY=sk_live_...    # ❌ Виявлено реальний ключ!

# ✅ Допустимі заповнювачі:
API_KEY=your-api-key-here
SECRET_KEY=placeholder
TOKEN=xxx
API_KEY=<your-key>
SECRET=${YOUR_SECRET}
```

**✅ Перевірити:**
- `.gitignore` правильно налаштований
- Немає конфліктів злиття
- Правильна гілка (попередити якщо main/master)
- API-ключі є лише заповнювачами

### 3. Запит підтвердження

Представити резюме:
```
📊 Резюме змін:
- X файлів змінено, Y додано, Z видалено
- Загалом: +AAA вставок, -BBB видалень

🔒 Безпека: ✅ Без секретів | ✅ Без великих файлів | ⚠️ [попередження]
🌿 Гілка: [назва] → origin/[назва]

Я виконаю: git add . → commit → push

Введіть 'yes' для продовження або 'no' для скасування.
```

**ЧЕКАТИ явного "yes" перед продовженням.**

### 4. Виконання (після підтвердження)

Запустити послідовно:
```bash
git add .
git status  # Перевірка індексу
```

### 5. Генерація повідомлення коміту

Проаналізувати зміни та створити conventional commit:

**Формат:**
```
[тип]: Короткий опис (макс. 72 символи)

- Ключова зміна 1
- Ключова зміна 2
- Ключова зміна 3
```

**Типи:** `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`, `perf`, `build`, `ci`

**Приклад:**
```
docs: Update concept README files with comprehensive documentation

- Add architecture diagrams and tables
- Include practical examples
- Expand best practices sections
```

### 6. Коміт та Push

```bash
git commit -m "$(cat <<'EOF'
[Згенероване повідомлення коміту]
EOF
)"
git push  # Якщо невдача: git pull --rebase && git push
git log -1 --oneline --decorate  # Перевірка
```

### 7. Підтвердження успіху

```
✅ Успішно відправлено на віддалений сервер!

Коміт: [хеш] [повідомлення]
Гілка: [гілка] → origin/[гілка]
Змінено файлів: X (+вставок, -видалень)
```

## Обробка помилок

- **git add невдача**: Перевірити дозволи, заблоковані файли, переконатися що репо ініціалізовано
- **git commit невдача**: Виправити pre-commit хуки, перевірити git config (user.name/email)
- **git push невдача**:
  - Non-fast-forward: `git pull --rebase && git push`
  - Немає віддаленої гілки: `git push -u origin [гілка]`
  - Захищена гілка: Використати PR-процес замість цього

## Коли використовувати

✅ **Доцільно:**
- Оновлення документації в кількох файлах
- Функція з тестами та документацією
- Виправлення помилок у кількох файлах
- Форматування/рефакторинг всього проєкту
- Зміни конфігурації

❌ **Уникати:**
- Невпевненість у тому, що комітиться
- Містить секрети/чутливі дані
- Захищені гілки без рев'ю
- Присутні конфлікти злиття
- Потрібна гранулярна історія комітів
- Pre-commit хуки не проходять

## Альтернативи

Якщо користувач хоче більше контролю, запропонувати:
1. **Вибіркове додавання**: Переглянути/додати конкретні файли
2. **Інтерактивне додавання**: `git add -p` для вибору патчів
3. **PR-процес**: Створити гілку → push → PR (використати команду `/pr`)

**⚠️ Памʼятайте**: Завжди переглядайте зміни перед push. Якщо сумніваєтесь, використовуйте окремі git-команди для більшого контролю.

---
**Останнє оновлення**: 9 квітня 2026
