Git — це безкоштовна система контролю версій з відкритим вихідним кодом, яка дозволяє відстежувати зміни у коді, координувати роботу команди та повертатись до будь-якого стану проекту.
Version Control System (VCS) — система управління версіями файлів. Дозволяє відстежувати зміни, повертатись до попередніх станів та координувати спільну роботу над проектом.
Найпростіша форма — збереження копій файлів на локальному диску. Приклад: RCS. Мінус — неможливість командної роботи та ризик втрати даних.
SVN, CVS — один центральний сервер зберігає всі версії. Команда підключається до нього. Мінус: єдина точка відмови, обмежена робота офлайн.
Git, Mercurial — кожен учасник має повну копію репозиторію. Робота без інтернету, висока надійність, потужні можливості злиття гілок.
Сучасна розробка неможлива без VCS. Системи контролю версій вирішують три ключові проблеми: відстеження змін (хто, коли та що змінив), координація команди (синхронізація роботи кількох розробників), резервне копіювання (можливість відновити будь-який стан проекту).
git init
Створює новий Git-репозиторій у поточному каталозі. Команда генерує прихований каталог
.git, де зберігаються всі метадані та об'єктна база даних репозиторію.
# Ініціалізувати репозиторій у поточному каталозі git init # Ініціалізувати у конкретному каталозі git init my-project # Вивід: Initialized empty Git repository in /path/.git/
git clone
Копіює існуючий репозиторій (локальний або віддалений) разом з усією історією змін.
Автоматично налаштовує з'єднання з оригінальним репозиторієм як origin.
# Клонувати з GitHub git clone https://github.com/user/repo.git # Клонувати у конкретну папку git clone https://github.com/user/repo.git my-folder # Клонувати лише останній комміт (швидко) git clone --depth 1 https://github.com/user/repo.git
git add
Переносить зміни файлів до проміжної зони (staging area / index). Лише файли у staging area потраплять до наступного комміту. Дозволяє точно контролювати, що буде збережено.
# Додати конкретний файл git add index.html # Додати всі файли у поточному каталозі git add . # Додати всі файли певного типу git add *.css # Інтерактивне додавання (вибір частин файлу) git add -p script.js
git commit
Фіксує зміни з проміжної зони у локальному репозиторії. Кожен комміт має унікальний SHA-1 хеш та містить: автора, дату, повідомлення та знімок стану файлів.
# Комміт з повідомленням git commit -m "Додано навігаційне меню" # Додати всі змінені файли та зробити комміт git commit -am "Виправлено стилі кнопок" # Змінити останній комміт git commit --amend -m "Виправлене повідомлення"
git status
Показує поточний стан робочого каталогу: які файли змінені, які додані до staging area, а які не відстежуються. Найуживаніша команда для щоденної роботи.
git status On branch main Changes to be committed: modified: index.html Changes not staged for commit: modified: style.css Untracked files: script.js # Короткий формат git status -s
git log
Відображає список комітів у репозиторії у зворотньому хронологічному порядку. Показує хеш, автора, дату та повідомлення кожного коміту.
# Детальна історія git log # Короткий однорядковий формат git log --oneline # Графічне дерево гілок git log --oneline --graph --all # Останні 5 комітів git log -5
git branch
Команда для роботи з гілками: перегляд, створення та видалення. Гілки дозволяють розробляти нові функції ізольовано від основного коду.
# Переглянути всі гілки git branch # Створити нову гілку git branch feature/login-page # Видалити гілку git branch -d feature/login-page # Переглянути всі гілки (включно з віддаленими) git branch -a
git checkout / switch
Переключається між гілками або відновлює файли з попередніх комітів. У новіших версіях
Git для цього рекомендується використовувати git switch.
# Переключитись на гілку git checkout develop # Створити та одразу переключитись git checkout -b feature/auth # Сучасний спосіб (Git 2.23+) git switch main git switch -c new-feature
git pull / push
git pull завантажує зміни з віддаленого репозиторію та зливає їх з поточною
гілкою. git push відправляє локальні коміти на сервер.
# Завантажити та злити зміни git pull origin main # Тільки завантажити (без злиття) git fetch origin # Відправити на сервер git push origin main # Відправити нову гілку git push -u origin feature/auth
git merge
Зливає зміни з однієї гілки в іншу. Git автоматично об'єднує незалежні зміни, а при конфліктах просить розробника вирішити їх вручну.
# Злити гілку feature в main git checkout main git merge feature/auth # Злиття без Fast-forward (зберігає історію) git merge --no-ff feature/auth # Скасувати незавершене злиття git merge --abort
Тут буде розміщено сертифікат про проходження курсу