🔀 Система контролю версій

Вивчаємо Git з нуля

Повний навчальний матеріал: від теорії систем контролю версій до практичних команд, переваг використання та офіційного сертифікату.

01
Системи контролю версій (СКВ)
Version Control Systems — основа сучасної розробки ПЗ

📝
Що таке СКВ?

Система контролю версій (СКВ, VCS) — програмне забезпечення, яке відстежує та записує зміни у файлах і директоріях з плином часу. Дозволяє повертатися до будь-якої збереженої версії.

🏛
Типи СКВ

Локальні — зміни лише на локальній машині (RCS).
Централізовані — єдиний сервер (SVN, CVS).
Розподілені — копія у кожного (Git, Mercurial).

🎯
Навіщо потрібні?

Відстеження всіх змін у проєкті, можливість повернутися до попередньої версії, паралельна робота кількох розробників без конфліктів та зберігання повної історії змін.

📅
Коротка історія

1972 — SCCS (перша СКВ), 1982 — RCS, 1990 — CVS, 2000 — SVN, 2005 — Git (Лінус Торвальдс). Сьогодні Git — де-факто стандарт у індустрії.

02
Що таке Git?
Розподілена система контролю версій від Лінуса Торвальдса

Git — безкоштовна розподілена система контролю версій з відкритим вихідним кодом, створена у 2005 році Лінусом Торвальдсом для розробки ядра Linux. Назва «Git» у британському сленгу означає «неприємна людина» — Торвальдс жартома назвав проєкт на свою честь.

🌐
Розподіленість

Кожен розробник має повну копію репозиторію, включно з усією історією змін. Це забезпечує роботу без підключення до мережі та підвищує надійність.

Швидкість

Git виконує більшість операцій локально, що робить його надзвичайно швидким порівняно з централізованими системами, які потребують звернення до сервера.

🔒
Цілісність даних

Кожен файл та коміт має унікальний SHA-1 хеш. Це гарантує, що жодні дані не можуть бути непомітно змінені або пошкоджені.

«Git є дурнем. Насправді це просто набір інструментів для роботи з файловою системою, яка слідкує за вмістом. Але разом вони утворюють дуже потужну систему.»

— Лінус Торвальдс, творець Git та Linux
03
Основні переваги Git
Чому Git обрали більшість розробників світу
🌿

Гілки та злиття

Гілки (branches) у Git — надзвичайно легкі та швидкі. Нову гілку можна створити за мілісекунди і переключитися між ними миттєво.

📦

Розподілений характер

Повна копія репозиторію на кожній машині. Будь-який розробник може бути сервером. Не існує єдиної точки відмови.

🔐

Безпека та цілісність

Криптографічна хеш-функція SHA-1 гарантує цілісність усієї історії. Неможливо непомітно підмінити або пошкодити дані.

🚀

Продуктивність

Git написаний на C і оптимізований для швидкості. Commit, diff, log — виконуються миттєво навіть у великих репозиторіях.

🤝

Командна робота

Pull requests, code review, merge — стандартний процес командної розробки. GitHub, GitLab та Bitbucket побудовані навколо Git.

⏮️

Відкат змін

Повна історія кожного файлу. Можна повернутися до будь-якого стану проєкту, порівняти версії або відновити видалені файли.

🆓

Безкоштовний і відкритий

Git — вільне ПЗ з відкритим кодом (GPL v2). Немає ліцензійних обмежень. Підтримується великою спільнотою по всьому світу.

🔧

Гнучкість

Git підтримує різні робочі процеси: GitFlow, GitHub Flow, Trunk-Based Development. Можна налаштувати під будь-який проєкт.

04
10 базових команд Git
Команди, які необхідні кожному розробнику щодня
1
git init Ініціалізація репозиторію

Створює новий локальний Git-репозиторій у поточній директорії. Ініціалізує приховану папку .git, де зберігається вся інформація про версії файлів.

bash
# Ініціалізуємо новий репозиторій у новій папці
git init my-project
# або в поточній директорії
git init
# Результат: Initialized empty Git repository in .git/
2
git clone Клонування репозиторію

Створює локальну копію існуючого репозиторію з GitHub, GitLab або іншого місця. Автоматично встановлює зв'язок з віддаленим репозиторієм як «origin».

bash
# Клонування по HTTPS
git clone https://github.com/user/repo.git
# Клонування по SSH
git clone git@github.com:user/repo.git
# Клонування у конкретну папку
git clone https://github.com/user/repo.git my-folder
3
git status Стан робочого дерева

Показує поточний стан робочої директорії: які файли змінено, які підготовлено до коміту (staged), а які не відстежуються (untracked). Найчастіше використовувана команда.

bash
git status
# Скорочений вивід
git status -s
# M  modified_file.txt
# ?? untracked_file.js
4
git add Додавання файлів до індексу

Додає зміни у файлах до «staging area» (індексу) — підготовчої зони перед створенням коміту. Можна додавати окремі файли або всі зміни одразу.

bash
# Додати конкретний файл
git add index.html
# Додати всі змінені файли
git add .
# Додати файли за маскою
git add *.js
# Інтерактивне додавання частинами
git add -p
5
git commit Збереження змін (коміт)

Зберігає підготовлені зміни у репозиторій як новий «знімок» (snapshot). Кожен коміт має унікальний SHA-1 хеш і повідомлення, яке описує зроблені зміни.

bash
# Коміт із повідомленням
git commit -m "feat: додано сторінку входу"
# Додати всі змінені файли і закомітити
git commit -am "fix: виправлено помилку валідації"
# Виправити останній коміт
git commit --amend
6
git branch Управління гілками

Дозволяє переглядати, створювати і видаляти гілки. Гілки — це незалежні лінії розробки. Основна гілка традиційно називається «main» або «master».

bash
# Переглянути всі гілки
git branch
# Створити нову гілку
git branch feature/login
# Перейти на гілку
git checkout feature/login
# Створити і одразу перейти
git checkout -b feature/login
# Видалити гілку
git branch -d feature/login
7
git merge Злиття гілок

Об'єднує зміни з однієї гілки в іншу. Git автоматично вирішує більшість конфліктів, але якщо ті самі рядки змінено по-різному — потрібне ручне вирішення конфлікту.

bash
# Перейти на основну гілку
git checkout main
# Злити гілку feature/login в main
git merge feature/login
# Злиття без fast-forward (завжди merge commit)
git merge --no-ff feature/login
8
git pull Отримання та злиття змін

Завантажує зміни з віддаленого репозиторію та одразу зливає їх з поточною гілкою. Еквівалент git fetch + git merge.

bash
# Завантажити зміни з origin
git pull
# Завантажити з конкретного remote і гілки
git pull origin main
# Використати rebase замість merge
git pull --rebase origin main
9
git push Відправлення змін на сервер

Відправляє локальні коміти до віддаленого репозиторію (GitHub, GitLab та ін.). Для першого push нової гілки потрібно вказати upstream за допомогою прапорця -u.

bash
# Відправити на origin поточну гілку
git push
# Вказати remote і гілку явно
git push origin main
# Перший push нової гілки
git push -u origin feature/login
# Видалити гілку на remote
git push origin --delete old-branch
10
git log Перегляд історії комітів

Показує хронологічну історію комітів у репозиторії: хеш коміту, автор, дата, повідомлення. Має безліч параметрів для фільтрації та форматування виведення.

bash
# Стандартна повна історія
git log
# Компактний однорядковий вигляд
git log --oneline
# Граф гілок у терміналі
git log --oneline --graph --all
# Останні 5 комітів
git log -n 5
# Коміти конкретного автора
git log --author="Іван Іваненко"
05
Сертифікат курсу Git
Підтвердіть свої знання офіційним документом
ℹ️

Як отримати сертифікат: Пройдіть всі розділи курсу, виконайте практичні завдання з роботи в Git та успішно складіть підсумковий тест. Після цього ви отримаєте персональний сертифікат із вашим ім'ям та датою видачі.

06
Джерела інформації
Рекомендовані ресурси для поглибленого вивчення Git