Git Workflow

Git — це система контролю версій, без якої неможлива командна розробка. Кожен конфіг, скрипт, документ в UMTC зберігається в Git-репозиторіях. Навчитесь працювати з Git — зможете вносити зміни без страху щось зламати.

💡 Чому Git?
Git дозволяє: відслідковувати всі зміни, повертатись до будь-якої версії, працювати паралельно кільком людям, робити code review. Без Git — хаос з файлами `config_v2_final_FINAL.txt`.

Початкове налаштування

Глобальна конфігурація

Виконайте один раз на кожній машині:

git config --global user.name "Ваше Ім'я"
git config --global user.email "your@email.com"
git config --global init.defaultBranch main
git config --global pull.rebase true
ℹ️ Про rebase
`pull.rebase true` — замість merge при pull робить rebase. Чистіша історія, менше merge-комітів. Рекомендовано для UMTC.

SSH ключі для Git

Аутентифікація через SSH — безпечніше і зручніше за паролі:

# Генерація ключа (якщо ще немає)
ssh-keygen -t ed25519 -C "your@email.com"

# Запуск ssh-agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# Скопіюйте публічний ключ і додайте на git.eliah.one
cat ~/.ssh/id_ed25519.pub

Детальніше: SSH ключі.

Базові операції

Клонування репозиторію

# Через SSH (рекомендовано)
git clone git@git.eliah.one:mytec/umtc-wiki.git

# Через HTTPS (якщо SSH не налаштований)
git clone https://git.eliah.one/mytec/umtc-wiki.git

Перевірка статусу

git status        # Що змінено?
git diff          # Які саме зміни?
git log --oneline -10  # Останні 10 комітів

Збереження змін

git add filename.md   # Додати конкретний файл
git add .             # Додати всі зміни (обережно!)
git commit -m "feat: add documentation for BGP"
git push origin main
⚠️ Не використовуйте `git add .` бездумно
Завжди перевіряйте `git status` перед commit. Легко випадково закомітити `.env` з паролями або величезні бінарні файли.

Feature Branch Workflow

Основний робочий процес для командної роботи:

gitGraph
    commit id: "main"
    branch feature/new-docs
    commit id: "add draft"
    commit id: "fix typos"
    checkout main
    merge feature/new-docs id: "PR merged"
    commit id: "continue"

Покроково

# 1. Оновіть main до актуальної версії
git checkout main
git pull origin main

# 2. Створіть feature гілку
git checkout -b feature/my-feature

# 3. Працюйте, робіть коміти
git add .
git commit -m "feat: implement feature"
git commit -m "fix: resolve edge case"

# 4. Push гілку та створіть Pull Request
git push -u origin feature/my-feature
# Відкрийте PR на git.eliah.one

# 5. Після merge видаліть локальну гілку
git checkout main
git pull origin main
git branch -d feature/my-feature

Формат commit повідомлень

Використовуємо Conventional Commits:

Prefix Коли використовувати
feat: Нова функціональність
fix: Виправлення бага
docs: Зміни в документації
refactor: Рефакторинг без зміни поведінки
test: Додавання/виправлення тестів
chore: Технічні зміни (CI, залежності)

Приклади:

feat: add WireGuard configuration guide
fix: resolve broken links in networking section
docs: update README with deployment instructions
refactor: extract common functions to utils.py
💡 Пишіть в імперативі
"add feature" — правильно. "added feature" або "adding feature" — ні. Уявіть, що коміт каже: "Apply this commit to add feature".

Вирішення конфліктів

Конфлікти виникають, коли дві людини змінили один файл:

# При merge conflict
git status  # Показує файли з конфліктами

# Відкрийте файл — побачите маркери:
# <<<<<<< HEAD
# ваші зміни
# =======
# зміни з іншої гілки
# >>>>>>> branch-name

# Відредагуйте файл, залиште потрібну версію
# Видаліть маркери <<<<, ====, >>>>

git add conflicted-file.md
git commit -m "resolve merge conflict in docs"

Корисні команди

Скасування змін

# Скасувати зміни в файлі (до commit)
git checkout -- filename

# Скасувати останній commit, зберегти зміни
git reset --soft HEAD~1

# Повернутись до конкретного commit (УВАГА: втрата змін!)
git reset --hard commit_hash

Stash — тимчасове сховище

# Зберегти поточні зміни
git stash

# Переключитись, зробити щось
git checkout another-branch

# Повернутись і відновити зміни
git checkout original-branch
git stash pop

Аліаси для швидкості

Додайте в ~/.gitconfig:

[alias]
    st = status
    co = checkout
    br = branch
    ci = commit
    lg = log --oneline --graph -15
    last = log -1 HEAD --stat

Тепер замість git status можна писати git st.

Типові помилки та їх вирішення

Проблема Рішення
Закомітив секрети git reset --soft HEAD~1, видаліть секрети, commit знову
Push в wrong branch git revert HEAD, push revert коміт
Забув перейти на feature branch git stash, git checkout -b feature/x, git stash pop
Conflict при rebase Вирішіть конфлікт, git add ., git rebase --continue

Пов'язані теми

Шлях: getting-started/git-workflow.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications