✅ Good
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 |
Пов'язані теми¶
- SSH ключі — налаштування автентифікації
- Linux основи — базові команди терміналу
Шлях: getting-started/git-workflow.md