🐙 Git та GitHub CLI

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Опубліковано

31 серпня 2025 р.

Базові й розширені команди Git для керування версіями, гілками, віддаленими репозиторіями, stash, тегами та GitHub CLI.

🔹 Базові команди

Команда

Приклад

Опис

git add Додати файл до індексу (staging area)
git add file.txt

Підготувати конкретний файл до наступного коміту

git add .

Підготувати всі зміни у поточній директорії та нижче

git add -p

Інтерактивно вибрати, які частини файлів додати (корисно для часткових комітів)

git clone Клонувати репозиторій у нову директорію
git clone -b branch_name URL

Клонувати лише вказану гілку (замість стандартної)

git clone --depth 1 URL

Клонувати лише останній коміт, створивши неглибоку копію для економії часу й місця

git commit Зафіксувати зміни у репозиторії
git commit -m "Initial commit"

Створити коміт із повідомленням без відкриття редактора

git commit -a -m "Fix bugs"

Підготувати й закомітити всі відслідковувані змінені файли з повідомленням

git commit --amend

Оновити останній коміт (змінити повідомлення або додати зміни)

git commit --fixup abc1234

Створити fixup-коміт для автоматичного squash під час інтерактивного rebase

git config Отримати або налаштувати параметри репозиторію чи глобальні параметри
git config --global user.name "Name"

Встановити глобальне ім’я користувача Git

git config --global user.email "email@example.com"

Встановити глобальний email у Git

git config --list

Вивести всі налаштування Git (ім’я, email, редактор тощо)

git diff Показати різницю між комітами, комітом і робочою директорією тощо
git diff HEAD

Показати зміни з останнього коміту (непідготовлені)

git diff --staged

Показати зміни, які увійдуть у наступний коміт

git diff --word-diff HEAD~1

Показати відмінності на рівні слів

git grep Шукати всередині файлів репозиторію
git grep "functionName"

Знайти всі згадки functionName у проєкті

git grep -n "TODO"

Знайти рядки з TODO та показати номери рядків (корисно для пошуку нотаток у коді)

git grep -i "login"

Шукати слово login без урахування регістру (співпадіння з Login, LOGIN, login тощо)

git init Створити новий порожній Git-репозиторій або реініціалізувати існуючий
git init my-project

Ініціалізувати новий репозиторій у директорії my-project

git init --bare

Ініціалізувати bare-репозиторій

git log Показати журнал комітів
git log --oneline

Показати історію комітів у компактному однорядковому форматі

git log --graph --all

Показати всі гілки у вигляді графа комітів

git log -p --stat

Показати патч і статистику змін файлів у комітах

git reset Зняти файли з індексу, зберігши зміни у робочій директорії
git reset HEAD file.txt

Прибрати файл з індексу (зміни залишаться)

git reset --hard HEAD~1

Повернутися на один коміт назад і видалити всі зміни (необоротно!)

git reset --soft HEAD~1

Скасувати останній коміт, але залишити зміни для повторного коміту

git reset --mixed HEAD~1

Скасувати коміт, залишивши зміни неіндексованими у робочій директорії

git show Показати різні типи об’єктів
git show <commit_hash>

Показати зміни й повідомлення конкретного коміту

git show HEAD~1

Показати попередній коміт перед поточним

git show --stat

Показати підсумок змін файлів у останньому коміті

git status Показати статус робочої директорії
git status -s

Показати статус у скороченому форматі

git status -b

Показати поточну гілку та стан файлів

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

Команда

Приклад

Опис

git branch Створювати, перелічувати або видаляти гілки
git branch new-feature

Створити нову гілку new-feature

git branch -d old-feature

Видалити локальну гілку old-feature

git checkout Перемикати гілки або відновлювати файли з іншого коміту
git checkout main

Перемкнутися на гілку main

git checkout -b new-branch

Створити й перемкнутися на нову гілку new-branch

git switch Перемикати гілки (спрощена альтернатива checkout)
git switch main

Перемкнутися на гілку main

git switch -c feature-x

Створити й перемкнутися на нову гілку feature-x

git switch new-feature

Перемкнутися на існуючу гілку new-feature

git merge Об’єднати зміни з іншої гілки в поточну
git merge new-feature

Злити гілку new-feature у поточну

git merge --no-ff new-feature

Завжди створювати merge-коміт (навіть якщо можливий fast-forward)

git merge --abort

Скасувати злиття та повернути зміни, якщо виникли конфлікти

git rebase Перенести або повторно застосувати коміти на нову базу
git rebase main

Перенести ваші коміти поверх гілки main

git rebase -i HEAD~3

Інтерактивно відредагувати останні 3 коміти

git rebase --abort

Зупинити й скасувати rebase, що триває

git rebase -i --autosquash HEAD~5

Автоматично об’єднати коміти, позначені як fixup або squash під час інтерактивного rebase

git cherry-pick Застосувати конкретні коміти з іншої гілки
git cherry-pick <hash>

Застосувати конкретний коміт (за хешем) у поточну гілку

git cherry-pick --continue

Продовжити cherry-pick після розв’язання конфліктів

git cherry-pick A^..B

Застосувати діапазон комітів від A (виключно) до B (включно)

📡 Віддалені репозиторії

Команда

Приклад

Опис

git remote Керувати посиланнями на віддалені репозиторії (наприклад, GitHub)
git remote -v

Показати віддалені репозиторії та їх URL

git remote add origin URL

Додати віддалений репозиторій з назвою origin

git pull Завантажити й автоматично об’єднати зміни з віддаленої гілки
git pull origin main

Отримати й злити зміни з віддаленої гілки main у поточну

git pull --rebase origin main

Отримати й застосувати rebase поточної гілки поверх віддаленої замість merge

git push Відправити локальні зміни у віддалений репозиторій
git push origin main

Відправити локальну гілку main у віддалений origin

git fetch Завантажити зміни з віддаленого репозиторію без злиття
git fetch origin

Отримати всі оновлення з origin, але не застосовувати їх

git fetch origin main

Отримати лише гілку main з віддаленого

git fetch --all

Отримати оновлення з усіх віддалених

git fetch --prune

Очистити видалені гілки — прибрати локальні посилання на гілки, які видалили віддалено

git fetch --dry-run

Показати, що буде отримано, без фактичного завантаження

git fetch origin +main

Примусово оновити локальну tracking-гілку (origin/main), перезаписавши конфлікти

📦 Stash і очищення

Команда

Приклад

Опис

git stash Тимчасово зберегти незакомічені зміни (робочий прогрес)
git stash

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

git stash apply

Застосувати останній stash (залишивши його збереженим)

git stash pop

Застосувати й видалити останній stash

git stash list

Показати список усіх збережених stash

git stash branch feature-fix

Створити нову гілку й застосувати до неї останній stash

git clean Назавжди видалити не відслідковувані файли (поза Git)
git clean -f

Видалити не відслідковувані файли у поточній директорії

git clean -fd

Видалити не відслідковувані файли та папки

git clean -n

Попередній перегляд того, що буде видалено (dry run)

🏷️ Теги

Команда

Приклад

Опис

git tag Створювати, перелічувати або видаляти теги для позначення точок історії (наприклад, релізів)
git tag -a v1.0 -m "Version 1.0"

Створити анотований тег v1.0 з повідомленням (зберігається як повний об’єкт Git, підходить для релізів)

git tag -d v1.0

Видалити локальний тег v1.0 (не впливає на віддалений)

git push Відправити коміти, гілки та теги з локального у віддалений репозиторій
git push origin --tags

Відправити всі локальні теги у віддалений репозиторій (корисно після створення кількох тегів)

git push origin v1.0

Відправити конкретний тег (наприклад, v1.0) у віддалений репозиторій

git push origin :refs/tags/v1.0

Видалити віддалений тег v1.0 (зверніть увагу на синтаксис з двокрапкою)

🛠️ Розв’язання конфліктів

Команда

Приклад

Опис

git mergetool Відкрити візуальний інструмент для розв’язання merge-конфліктів
git mergetool --tool=meld

Використати конкретний інструмент (наприклад, Meld) для виправлення конфліктів

git rerere Дозволити Git запам’ятати, як ви розв’язували конфлікти раніше
git config --global rerere.enabled true

Увімкнути автоматичне повторне використання рішень для конфліктів

git rerere status

Показати, для яких файлів збережені рішення конфліктів

git rerere diff

Показати, які зміни Git зберіг для повторного використання

⚙️ Розширені команди

Команда

Приклад

Опис

git bisect Використати бінарний пошук, щоб знайти коміт, який призвів до багу
git bisect start

Почати бінарний пошук між відомим добрим і поганим комітом, щоб знайти баг

git bisect bad

Позначити поточний коміт як “поганий” (містить баг)

git bisect good <commit>

Позначити відомий “добрий” коміт, де бага не було

git blame Показати, хто востаннє змінив кожен рядок файлу, з ревізією й автором
git blame file.txt

Показати автора й інформацію про коміт для кожного рядка у файлі

git blame -L 10,20 file.txt

Показати blame-інформацію лише для рядків 10–20

git blame --show-email file.txt

Показати email-адреси авторів поряд зі змінами рядків

git reflog Перегляд і керування журналом посилань (reflog) переміщень гілок і HEAD
git reflog show main@{1.week.ago}

Подивитися, куди вказувала гілка main тиждень тому

git reflog expire --expire=30.days --dry-run

Попередньо переглянути, які записи reflog старші за 30 днів можна видалити (без змін)

git reflog delete HEAD@{2}

Видалити конкретний запис reflog (обережно, може вплинути на відновлення)

git submodule Додати, ініціалізувати, оновити або переглянути підмодулі (репозиторії в репозиторії)
git submodule add URL path

Додати зовнішній репозиторій як підмодуль у вказаному шляху

git submodule update --init

Ініціалізувати й завантажити всі підмодулі, зазначені в репозиторії

git submodule foreach git pull

Запустити git pull у кожному підмодулі для оновлення до останнього коміту

git submodule sync --recursive

Синхронізувати URL підмодулів після змін у файлі .gitmodules

git submodule update --remote --merge

Оновити підмодулі до останнього коміту їх віддалених гілок

git archive Створити архів (zip, tar тощо) файлів із конкретного коміту чи гілки
git archive --format=zip HEAD > archive.zip

Створити ZIP-архів файлів проєкту з HEAD

git archive -o release.tar.gz HEAD

Створити стиснутий .tar.gz архів з поточного HEAD

git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz

Створити стиснутий .tar.gz архів проєкту з усіма файлами у папці project/ всередині архіву

git gc Очистити непотрібні файли та оптимізувати репозиторій для продуктивності
git gc --aggressive

Виконати повне очищення й оптимізацію (може бути повільним, але ефективним)

git gc --prune=now

Видалити всі недосяжні об’єкти негайно (небезпечна дія, якщо не впевнені)

git shortlog Короткий підсумок авторів та їх комітів
git shortlog -e

Показати список авторів з email-адресами (наприклад, щоб проаналізувати внески)

git shortlog -s -n

Показати кількість комітів кожного автора, відсортовану за кількістю

git shortlog -sne

Те саме, але також включає імена й email — корисно для детального відстеження активності

git revert Створити новий коміт, що відміняє зміни попереднього коміту без переписування історії
git revert HEAD

Відмінити останній коміт, створивши новий, що скасовує його зміни

git revert <commit_hash>

Відмінити конкретний коміт за хешем, безпечно створивши новий, що його скасовує

🐙 GitHub CLI

gh дозволяє керувати GitHub із терміналу.

Команда

Приклад

Опис

gh auth login Автентифікуватися на GitHub-хості, щоб команди CLI могли працювати з вашим акаунтом
gh auth login --with-token < mytoken.txt

Увійти за допомогою персонального токена доступу, збереженого у файлі (mytoken.txt)

gh auth login --hostname enterprise.internal

Автентифікація на GitHub Enterprise-сервері (не github.com)

gh repo clone Клонувати репозиторій GitHub на локальну машину
gh repo clone user/repo

Клонувати репозиторій repo, що належить користувачу user, у папку з назвою repo

gh repo clone cli/cli -- --depth=1

Клонувати репозиторій, завантаживши лише останній коміт (швидша й легша копія)

gh repo clone cli/cli workspace/cli

Клонувати репозиторій у власну папку workspace/cli

gh issue list Вивести список issues у GitHub-репозиторії з можливістю фільтрації
gh issue list --assignee "@me"

Вивести список issues, призначених вам

gh issue list --state all

Вивести всі issues незалежно від стану (відкриті чи закриті)

gh issue list --search "error no:assignee sort:created-asc"

Вивести issues, що містять слово “error”, без виконавців, відсортовані за датою створення

gh pr create Створити pull request на GitHub через CLI
gh pr create --title "..."

Створити pull request із вказаним заголовком

gh pr create --project "Roadmap"

Прив’язати pull request до проєкту GitHub із назвою “Roadmap”

gh pr create --base develop --head monalisa:feature

Створити PR із гілки feature у форку monalisa у гілку develop

gh repo create Створити новий GitHub-репозиторій із CLI
gh repo create my-project

Створити новий репозиторій з назвою my-project на GitHub (із подальшими інтерактивними кроками)

gh repo create my-project --public --clone

Створити публічний репозиторій та клонувати його локально

gh repo create my-project --private --source=. --remote=upstream

Створити приватний віддалений репозиторій із поточної папки та додати remote з назвою upstream

💡 Git-аліаси (зручні скорочення)

Налаштуйте зручні псевдоніми для прискорення виконання поширених команд Git:

git config --global alias.br branch                                       # скорочення для: git branch
git config --global alias.ci commit                                       # скорочення для: git commit
git config --global alias.co checkout                                     # скорочення для: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # гарний граф історії
git config --global alias.last "log -1 HEAD"                              # показати останній коміт
git config --global alias.st status                                       # скорочення для: git status

🚀 Розширені Git-команди для професіоналів

Команда

Приклад

Опис

git filter-repo Потужний та швидкий інструмент для переписування історії Git з метою видалення чи зміни файлів, авторства або шляхів; замінює git filter-branch із кращою швидкістю та безпекою
git filter-repo --path secret.txt --invert-paths

Ефективно переписати історію репозиторію, щоб видалити конфіденційні файли чи каталоги без проблем продуктивності git filter-branch. Використовуйте обережно

git filter-repo --replace-text replacements.txt

Масово замінити рядки або шаблони по всій історії (наприклад, очистити креденшіали)

git filter-repo --subdirectory-filter src

Витягти історію підкаталогу в новий репозиторій зі збереженням метаданих комітів

git worktree Керування кількома робочими деревами, прив’язаними до одного репозиторію, що дозволяє паралельно працювати над різними гілками без клонування
git worktree add ../feature feature-branch

Створити додаткове робоче дерево, прив’язане до того самого репозиторію, для паралельного checkout різних гілок

git worktree list

Перелічити всі активні worktree, їхні шляхи та пов’язані гілки

git worktree remove ../feature

Видалити прив’язане worktree, коли воно більше не потрібне, із безпечним очищенням

git replace Створити тимчасові посилання, які замінюють існуючі об’єкти, дозволяючи безпечні локальні маніпуляції з історією та тестування
git replace <old_commit> <new_commit>

Тимчасово замінити один коміт іншим у локальному репозиторії для тестування чи патчингу без переписування історії

git replace --list

Показати всі активні replacement-посилання

git replace -d <replace_ref>

Видалити конкретне replacement-посилання для повернення до попередньої поведінки

git stash Тимчасово зберегти незакомічені зміни у стек, щоб перемикати контекст без створення незавершених комітів
git stash push -p

Інтерактивно вибрати частини змін для збереження у stash із точним контролем

git stash push -m "WIP selective stash"

Створити stash із власним повідомленням для зручної ідентифікації

git stash apply stash@{2}

Застосувати конкретний stash зі списку, не видаляючи його

git rebase Повторно застосувати коміти поверх іншої бази, забезпечуючи чистішу, лінійну історію проєкту та інтерактивне редагування історії
git rebase --interactive --autosquash

Запустити інтерактивний rebase із автоматичним reorder і squash комітів, позначених як fixup чи squash

git rebase -i --autosquash HEAD~10

Автоматично впорядкувати й об’єднати fixup/squash-коміти для очищення історії перед push

git commit --fixup <commit>

Створити fixup-коміт, який буде автоматично об’єднано під час інтерактивного rebase

git commit --squash <commit>

Створити squash-коміт для об’єднання з вказаним комітом під час rebase

git bisect Інструмент бінарного пошуку для ефективного виявлення коміту, який запровадив баг, шляхом тестування комітів і поступового звуження діапазону
git bisect run

Автоматизувати процес bisect, запустивши тестовий скрипт на кожному коміті, щоб швидко знайти проблемний коміт

git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh

Автоматично виконувати bisect за допомогою тест-скрипта, значно прискорюючи пошук багів

git bisect visualize

Відкрити графічний інструмент для візуалізації процесу bisection

git bisect reset

Вийти з режиму bisect і повернутися до оригінального HEAD

git commit Фіксувати зміни у репозиторії з розширеними опціями amend, sign, fixup і кастомізації повідомлень для підтримки якісної історії проєкту
git commit --gpg-sign

Створити коміт, підписаний вашим GPG-ключем, для криптографічної перевірки автентичності

git commit -S -m "Signed commit"

Підписати коміти GPG-ключем для перевірки цілісності та авторства

git config --global user.signingkey <key_id>

Налаштувати GPG-ключ для підпису комітів глобально

git log --show-signature

Перевірити й показати інформацію про GPG-підпис комітів

git reflog Зберігати журнал оновлень HEAD і гілок, важливий для відновлення втрачених комітів і розуміння локальної історії
git reset --hard HEAD@{3}

Скинути поточну гілку до попереднього стану з reflog, щоб відновити або скасувати зміни

git reflog expire --expire=now --all

Негайно очистити всі записи reflog (обережно!)

🧰 Поради та автоматизація професійних робочих процесів

Тема

Команди / Приклад

Пояснення та поради

Агресивне очищення репозиторію

git gc --aggressive --prune=now

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

Паралельні робочі дерева гілок

git worktree add ../feature-branch feature

Мати кілька робочих дерев для одночасної розробки функцій без накладних витрат на клонування

Чиста, лінійна історія

git rebase -i --autosquash

Перед push виконайте інтерактивний rebase з autosquash, щоб зберігати історію чистою та читабельною

Безпечні коміти

git commit -S

Підписуйте коміти GPG-ключем для підвищення довіри у спільних репозиторіях (часто обов’язково в корпоративному середовищі)

Автоматизований bisect

git bisect run ./test-script.sh

Автоматизуйте пошук багів, запускаючи тест-скрипт на кожному коміті під час bisect

Кеш розв’язання конфліктів

git config --global rerere.enabled true

Увімкніть повторне використання рішень конфліктів, щоб прискорити повторне злиття чи rebase

Спільні псевдоніми та хуки

Зберігайте загальні Git-аліаси та хуки комітів у спільному репозиторії чи CI-пайплайні для підтримки стандартів команди

Додаткові ресурси

🧠 Порада

Не намагайтеся запам’ятати все. Використовуйте --help, досліджуйте й регулярно практикуйтеся:

git help <command>
git status

🌐 Корисні посилання

📘 Офіційна документація Git — докладний посібник для всіх команд Git:
https://git-scm.com/docs

📙 Learn Git Branching — інтерактивний візуальний курс для оволодіння концепціями гілок:
https://learngitbranching.js.org

📕 Книга Pro Git (безкоштовна, автори: Scott Chacon & Ben Straub):
https://git-scm.com/book

📗 Git Cheatsheet (офіційна компактна шпаргалка):
https://education.github.com/git-cheat-sheet-education.pdf