Вітаю! ✨ Цей репозиторій містить вичерпний конспект, який я створила під час проходження курсу Нікіти Тимошенка про Git та GitHub
📌 Конспект у форматі питання-відповіді, щоб ви могли перевірити себе та швидко знаходити потрібну інформацію.
📌 Структура наближена до курсу, тож вам буде легко орієнтуватися в темах і знаходити потрібний матеріал.
📌 Раджу пройти сам курс та прочитати конспект від Нікіти адже там багато корисного:
- детальний опис команд,
- практичні завдання,
- корисні посилання.
✨ А цей конспект допоможе вам перевірити, наскільки добре ви засвоїли отримані знання! 🚀
Якщо є якісь зауваження, або пропозиції для покращення не соромтесь створювати issues або pull requests. Я відкрита до зворотного зв'язку 🙌
Легкого навчання!😊
Командний рядок
Git
GitHub
Що таке GUI?
- графічний інтерфейс користувача (Graphical User Interface)
- спосіб взаємодії користувача з комп'ютером із використанням графічних елементів (вікна, кнопки і тд)
Що таке Сommand Line?
- командний рядок
- текстовий інтерфейс для взаємодії з операційною системою
- простір, де вводяться текстові команди
- і тут же можуть викликатися і запускатися певні програми
Що таке термінал?
- програма або інструмент, який надає доступ до командного рядка (вікно, куди команди вводяться)
Що таке Shell?
- оболонка
- програма, яка виконує команди, введені у терміналі (інтерпретатор команд)
Що таке Bash?
- один із типів оболонок (Shell)
- Bourne Again Shell (Bash)
- підтримується у Windows через Git Bash
Що таке каталог (директорія)?
- структура, яка використовується для організації файлів у файловій системі
Що таке поточний каталог?
- папка, в якій користувач перебуває прямо зараз
- команди по замовчуванню виконуються у поточному каталозі
Що таке батьківський каталог?
- папка, що знаходиться на один рівень вища, за поточний
Що таке домашній каталог?
- персональний каталог користувача
- Диск С —> Users —> User name (або USER)
Що таке кореневий каталог?
- початкова точка файлової системи
- найвищий рівень ієрархії каталогів
Що таке шлях (path)?
- адреси файлів у каталозі файлової системи
Які є два види шляхів до файлів?
- абсолютний
- відносний
Де починається абсолютний шях?
- з кореневого каталогу
Що визначає відносний шях?
- розташування файлу по відношенню до поточного каталогу
Що таке розширення файлів?
- частина назви файлу, що йде після крапки
Для чого потрібне розширення файлів?
- для визначення типу файлу
Яка команда відображає вміст всієї папки, у якій знаходиться користувач?
- ls
Яка команда дозволяє відобразити вміст каталогу відмінного від поточного?
- ls
path
(вказати шлях)
Які типи шляхів це дозволяють?
- обидва: відносний та абсолютний
Яка команда дозволяє повернути вмісти кореневого каталогу?
- ls /
Яка команда дозволяє повернути вмісти батьківського каталогу?
- ls ..
Яка команда очищає вікно терміналу?
- clear
Як у Git Bash навігувати по командам, що вже були написані?
- стрілочка вгору (до попередніх команд)
- стрілочка вниз (до наступних команд, що були після попередніх)
Що таке прапорці команд?
- додаткові опції команд
Як впроваджуються прапорці команд?
- через дефіси, які ми пишемо після команди
Який прапорець надає довідку?
комадна
--help
Яка команда дозволяє повернути вміст всіх папок у довгому форматі (з прапорцем)?
- ls -l
Як вивести дані, які повертає команда у вигляді текстового файлу?
your_command
> file_name.extension
Яка команда дозволяє вивести вміст папок у вигляді текстового файлу?
- ls >
file_name.extension
- наприклад, ls > output.txt
Яка команда дозволяє вивести вміст папок у вигляді текстового файлу у довгому форматі?
- ls -l >
file_name.extension
- наприклад, ls -l > output.txt
Яка команда показує поточну директорію?
- pwd
- prind working directory
Що повертає ця команда?
- шлях до каталогу, у якому ми знаходимось
Яка команда дозволяє змінити поточну директорію на домашній каталог користувача?
- cd
- change directory
Як змінити поточну директорію на якусь конкретну іншу?
- cd
path
(вказати шлях)
Яка команда повертає до батьківської директорії?
- cd ..
Яка команда створює нову папку?
- mkdir
directory_name
- make directory
Як створити одразу кілька папок у поточній директорії?
- mkdir
directory_name_1
directory_name_2
- якщо потрібні вкладені каталоги:
- mkdir -p dir1/dir2/dir3
Яка команда дозволяє скопіювати директорію до певної папки?
- cp -r
copy_directory to_directory
Яка команда дозволяє видалити директорію?
- rm -r
file_name
(рекурсивне видалення) - якщо директорія містить файли:
- rm -rf directory_name
Яка команда створює файл?
- touch
file_name.extension
Як команда дозволяє скопіювати файл і перенести його до іншої папки?
- cp
copy_file destination_directory/
- copy
Яка команда дозволяє записати щось у файл?
- echo
print_something
>in_file
Яка команда дозволяє повернути вміст файлу?
- cat
file_name
Яка команда дозволяє видалити файл?
- rm
file_name
Що таке Git?
- програмне забезпечення
- система контролю версій (VCS — version control system)
- відстежує зміни у файлах
- дає змогу повернутися до попередніх версій
- забезпечує зручну співпрацю команд
Що пропонує Git?
- локальну базу даних
- синхронізацію з іншими серверами
- відновлення даних у разі збою
Які основні стани файлів у Git?
- modified — файл змінено, але не додано до бази даних
- staged — файл підготовлено до збереження
- committed — зміни збережено у локальній базі даних
Що робить звичайну папку локальним репозиторієм?
- папка .git
Яка команда ініціалізує репозиторій?
- git init
- після цієї команди з'являється папка .git і наша папка стала репозиторієм
Як переконатися, що Git встановлено (яка команда)?
- git --version
Яка команда дозволяє змінити налаштування (конфігурацію) Git?
- git config
Який прапорець дозволяє встановити зміни конфігурації для всіх репозиторіїв (теперішніх і майбутніх)?
- --global
Як встановити ім'я користувача у конфігурації?
- git config --global user.name
"your_name"
Як встановити пошту (email) користувача у конфігурації?
- git config --global user.email
"your_email"
Навіщо потрібно встановлювати ці налаштування?
- щоб git міг відслідковувати, хто автор змін
Яка команда перелік всіх налаштувань конфігурації?
- git config --list
Яка команда дозволяє вивести всі папки, в тому числі приховані (трекінгові)?
- ls -a
Яка команда дозволяє перевірити статус статуси файлів?
- git status
Яка команда дозволяє отримати довідку?
- git --help
- git
your_command
--help (довідка для конкретної команди)
Які три основні концепції git?
- коміти
- збереження усіх версій файлів
- гілки
Що таке коміт?
- збереження файлу (його версії)
- інформація про те:
- хто зберіг
- коли зберіг
- що саме було зроблено
- можливість повернутися до попередніх версій файлів
Як зберігаються в комітах файли, в який не було жодних змін?
- зберігається посилання на вихідний файл
Який порядок локального збереження версій файлів?
- git add (staging area)
- git commit (committed area)
Які шляхи вказання шляху до потрібної директорії (команда і два варіанти відображення шляху)?
- команда — cd
- відображення шляху:
- перетягти папку у вікно git bash (і шлях відобразиться, треба тільки cd на початку дописати)
- написати повністю шлях самостійно
Які каталоги git не відстежує?
- в яких немає файлів, або файлів, які ігноруються через .gitignore
Як додати усі файли однією командою у staging area?
- git add .
Як додати один файл у staging area?
- git add
file_name
Як додати коротке повідомлення до коміту?
- git commit -m
"your_comment"
- вказується коротко, які зміни зроблено
Як змінити текстовий редактор і встановити його основним (команда)?
- git config --global core.editor `"your_editor"
Яка команда виводить перелік всіх комітів?
- git log
Який прапорець дозволяє вивести історію у більш компактному вигляді?
- --oneline
- повний варіант команди: git log --oneline
Яка команда (з прапорцем) дозволяє подивитися зміни комітів?
- git log -p
Як вийти з інтерактивного режиму (яка клавіша)?
- q (маленька)
Яка команда дозволяє подивитись відмінності у файлах (і всього репозиторію)?
- git diff (difference)
Яка загальноприйнята практика формулювання повідомлень для комітів?
- наказова (імперативна) форма
- (add, write, remove, delete, change, fix etc.)
Як додати тіло коміту, щоб детальніше описати зміни (послідовність кроків)?
- не закривати лапки
- клікнути enter
- перейти на новий рядок
- продовжити писати
- закрити лапки
- enter (для відправки коміту)
Як додати зміни так, щоб вони були частиною попереднього коміту, а не новоствореним комітом?
- git add .
- git commit --amend --no-edit (замість повідомлення)
- enter
Як накопичувати зміни з різних файлів для одного коміту?
- внести зміни в різні файли та/або створити нові файли
- git add . (додаємо всі файли)
- git commit -m
"your_commit"
Як додати кілька файлів (не всі) за один раз до staging area?
- git add
<file_1> <file_3> <file_5>
Як побачити різницю у файлах, що вже додані до staging area?
- git diff --chached
Як повернути файли зі staging area до working area?
- після git add але до git commit
- git restore --staged <file_name> or path to file
Як подивитися, який саме невідстежуваний файл користувач планує видалити (який прапорець)?
- -n
- повна команда: git clean -n
Яка команда дозволяє видалити невідстежувані файли з git (з прапорцем)?
- git clean -f
Яка команда дозволяє видалити невідстежувані файли і каталоги з git (з прапорцем)?
- git clean -fd
- ця команда незворотна
Яка команда дозволяє видалити відстежувані файли з індексу та робочого каталогу?
- git rm
<file_name>
(remove)
Яка команда дозволяє видалити відстежувані файли тільки з індексу, залишивши його у робочому каталозі (з прапорцем)?
- git rm --cached
<file_name>
Що зберігається в комітах?
- зміни, що були зроблені у файлах
Що має унікальне кожна нова версія файлів?
- "#" — хеш-код (як id)
- є унікальним для кожної версії файлу
Яка команда дозволяє повернути закомічений файл (наприклад, після його видалення)?
- git restore
file_name
- за замовчування звернення до останньої закоміченої версії файлу
Яка команда дозволяє дізнатися, що було змінено в тому чи іншому коміті (по id)?
- git show
commit_id
Яка команда дозволяє повернутися до конкретної версії файлу (а не тільки останньої, по id)?
- git restore --source=
commit_id
file_name
Яка команда дозволяє відмінити зміни, які вже були додані до staging area?
- git restore --staged
file_name
Яка команда дозволяє повернутися до попередньої (та/або конкретної версії всього проєкту)?
- git reset
прапорець
HEAD або ID
HEAD
— останній комітID
— конкретний коміт з переліку попередніх
Які прапорці має ця команда і чим вони відрізняються?
-
--hard — перезапише повністю до поточної версії, до якої ми звернемося (через id) і повністю видаляє всі зміни
-
--soft — дозволяє зберегти внесені зміни (у staging)
-
--mixed — використовується за замовчуванням
- всі зміни, які були додані до staging area, будуть прибрані назад у робочу директорію
- тобто файли, які були в staging, знову стають "modified", але не видаляються
-
повні команди:
- git reset --hard
ID
- git reset --soft
ID
- git reset --hard
Яка основна гілка проєкту?
- main (master) — різна назва, але значить одне й те саме
Що таке HEAD?
- вказівник того, де ми знаходимось
- в якій гілці
- в якому коміті
- за замовчуванням знаходимося в останньому коміті
- кожна окрема гілка має свій HEAD
Що означає "detached HEAD"?
- коли
HEAD
не вказує на останній коміт гілки, а вказує на конкретний коміт або тег
За допомогою якої команди HEAD переходить у стан detached HEAD?
- git checkout
commit_hash
- у цьому випадку
HEAD
вказує на той коміт, а не на гілку
Що дає detached HEAD?
- У стані detached HEAD можна переглядати або тестувати код на певному коміті, але будь-які нові коміти, які будуть зроблені, не будуть пов'язані з жодною гілкою
- для збереження коміту, що був зроблений у цьому стані, потрібно створити нову гілку, щоб не втратити зміни
Як вийти зі стану "detached HEAD"?
- використати команду
git checkout <branch-name>
, де<branch-name>
— це назва гілки, на якій ви хотіли б продовжити працювати
Що таке конфлікти в git?
- ситуація, коли на одних і тих самих рядках, в одних і тим самих файлах вказані різні дані
Що значить "вирішити конфлікт"?
- конкретне вказання git, які саме зміни мають бути внесені
Що значить merge?
- впровадити зміни до основої гілки (об'єднати всі додаткові гілки в main)
Яка є альтернативна merge?
- rebase
Що дозволяє робити ця альтернатива?
- інтегрувати зміни після останньої актуальної версії в main гілці
Які складнощі пов'язані з цим способом?
- перезапис id деяких комітів, що може викликати певні складнощі, якщо виникне потреба відновити якісь попереднії версії
Яка команда виведе список всіх гілок?
- якщо потрібно побачити тільки локальні гілки
- git branch
- якщо потрібно побачити віддалені гілки
- git branch -r
Яка команда дозволяє створити нову гілку?
- git branch
branch_name
Яка команда дозволяє перемикатися між гілками?
- git checkout
branch_name
Яка команда дозволяє створити і перемкнутися на гілку (одна команда — дві дії)?
- git checkout -b
branch_name
- -b — від слова branch
Яка є альтернативна команда для зміни гілки?
- git switch
branch_name
Яка вона дозволяє за один крок створити гілку і одразу перемкнутися на неї (синтаксис команди)?
- git switch -b
branch_name
Яка різниця між цими двома варіантами команд?
- git switch:
- більш проста у розуміння і використанні
- використовується спеціально для перемикання (та/або для створення і перемикання) між гілками
- git checkout:
- більш універсальна
- використовується для:
- перемикання (та/або для створення і перемикання) між гілками
- зміни гілок
- відновлення файлів (скасування змін)
- перемикання між комітами
В якій гілці ми маємо знаходитися перед тим, як зробити об'єднання гілок?
- в тій, в яку хочемо інтегрувати зміни (в цільовій)
Яка команда дозволяє об'єднати гілки?
- git merge
branch_name
Назву якої гілки ми маємо писати у команді об'єднання?
- назву гілки, яку об'єднуємо з цільовою гілкою (тобто назву альтернативної, додаткової гілки)
Яка команда дозволяє тільки передати зміни, але не об'єднувати гілки?
- git fetch
Яка команда (з прапорцем) дозволяє видалити гілку?
- git branch -d
branch_name
- git branch -D
branch_name
Яка різниця між цими двома прапорцями?
- -d (soft delete) — не дозволить видалити гілку, яка ще не була передана до main (яка ще не інтегрована)
- -D (hard delete) — видалить гілку незалежно від того, чи вона вже інтегрована у main чи ще ні (безумовне видалення гілки)
Які бувають git-сховища?
- GitHub
- GitLab
- Bitbucket, Azure DevOps, SourceForge — також популярні віддалені репозиторії
Яке типове ім'я git?
- origin - стандартна назва для віддаленого репозиторію, але її можна змінювати
Що передбачає концепція клонування?
- створення локальної копії віддаленого репозиторію на комп'ютері
Що передбачає концепція такого ключа?
- спосіб безпечного підключення по GitHub без введення пароля
- SSH-ключ складається з публічного та приватного ключа. Публічний ключ додається до GitHub, а приватний зберігається локально
Що передбачає концепція push?
- надсилання змін у віддалений репозиторій
Яка команда?
- git push
Що передбачає ця концепція?
- завантаження змін з віддаленого репозиторію
Яка команда?
- git pull
Що передбачає ця концепція?
- запит на злиття змін із однієї гілки в іншу
- часто використовується для перевірки коду
Як називається перевірка коду іншим розробником?
- code review
Що передбачає ця концепція?
- копіювання репозиторію в акаунт користувача, що дозволяє експериментувати з кодом, не змінюючи оригінал
Що це за файл?
- файл документації, що зазвичай містить опис проєкту, інструкції з використання та іншу корисну інформацію
Що означає розширення **.md**
- формат markdown
- система форматування тексту
Що передбачає ця концепція?
- систему відстеження помилок, запитів на нові функції та обговорень у репозиторії
Яка має бути назва репозиторію?
- унікальною в межах репозиторію
Які бувають типи репозиторіїв?
- публічні
- приватні
Що таке ліцензія?
- документ, у якому прописано, що можна, а що заборонено робити з репозиторієм (чи можна завантажувати код, перевикористовувати його у власних проєктах і тд)
- опис можливостей взаємодії з репозиторієм
Про що говорить ліцензія MIT?
- про те, що код і файли з репозиторію можна використовувати як завгодно без обмежень, але обов'язково потрібно вказати авторство власника репозиторію, з якого беруться дані
Як можна додати файли у репозиторій?
- створити прямо на платформі у github
- завантажити з комп'ютера через командний рядок
Що таке .gitignore?
- файл, який використовується для того, щоб ігнорувати певні файли та папки в git. Файли і теки, додані в .gitignore не будуть додватись у коміти та потрапляти у репозиторій
Яку папку ні в якому разі не можна додавати у репозиторій?
- node_module — тека, яка містить всі залежності, встановлені у проєкті
Якою командою можна завантажити цю папку, не завантажуючи її у репозиторій?
- npm install
Що дає змогу робити кнопка "Watch" у репозиторії?
- слідкувати за змінами репозиторію
Що дає змогу зробити кнопка "Fork"?
- зробити повну копію репозиторію
Як використовується зірочка в репозиторіях?
- як елементи рейтингу
Чи впливають зміни, внесені у скопійований репозиторій на оригінал?
- ніяким чином, це два окремі репозиторії
У якій вкладці можна подивитися, хто зробив копію репозиторію?
- insights —> forks
Як можна змінити видимість репозиторію (яка вкладка і шлях)?
- settings —> general —> danger zone —> change repository visibility
Що таке pull request?
- запит на об'єднання змін, які розробник вніс в код, з основною гілкою проєкту
Де розробник може вносити зміни віддалено без шкоди основному репозиторію (два варіанти)?
- створити окрему гілку (git branch -b
branch_name
) - повністю скопіювати репозиторій (fork)
Яка вкладка відповідає за створення pull request?
- однойменна "Pull request"
Який статус повідомляє про те, що об'єднання можливе?
- able to merge
Яка вкладка відповідає за створення завдання?
- однойменна "Issues"
Як можна створити задачу?
- натиснути на кнопку "New issue"
- ввести title — лаконічно пояснити, яка проблема виникла
- написати description (за потреби додати якісь додаткові матеріали) — запропонувати кілька рішень
- натиснути кнопку "create"
Які основні кроки?
- connection — утворення зв'язку між git & github
- ssh-key
- sync — синхронізація того, що є на комп'ютері і того, що є на github
- push local to remote repo або
- clone remote to local repo
- pull — завантажити собі останню актуальну версію проєкту (оновлення локального репо)
- branch — створюємо нову гілку
- commit — передаємо зміни з гілки до локального репо
- push — відправляємо всю гілку зі змінами до віддаленого репо
- pull request — інформація про зміни, які ми плануємо передати до main
- code review
- merge
- повторюємо цикл з пункту три
Що таке ssh-ключ?
- файл, який має зберігати приватний ключ на комп'ютері та одночасно публічний ключ на github
У якій вкладці ці ключі зберігаються на github?
- profile settings —> SSH and GPG keys
Яка послідовність створення і збереження?
- створити файл на машині, де буде зберігатися ключ
- додати його на github
Скільки разів має створюватися цей ключ?
- один раз на одну машину
Мега важливий конспект по створенню і збереженню ssh ключа
Яка послідовність ініціалізацї, комітів та додавання файлів до локального репо (крок — команда)?
- ініціалізація репозиторію
- git init
- додати файли до staging area
- git add .
- зробити коміт
- git commit -m
"Initial commit"
- git commit -m
- перевірка статусу (за потреби)
- git status
Яка команда дозволяє відправити зміни на github?
- git remote add origin
repo_link
(https or ssh)
Що означає "origin"?
- використовується як псевдонім до посилання
Звідки можна взяти посилання на repo?
- з github
- при створення порожнього репозиторію це вікно відкривається по дефолту з детальним описом, як віддалений репозиторій підв'язати до локального
Яка команда дозволяє відправити весь код з локальної машини на віддалений репозиторій після об'єднання цих репозиторіїв?
- git push -u origin main
- -u — від слова "upstream"
За що відповідає upstream?
- повідомляє github з якої гілки брати зміни та/або в яку гілку зміни завантажувати
- Upstream гілка — це віддалена гілка, до якої підключено локальну гілку для відправки та отримання змін
Яка команда дозволяє перейменувати головну гілку (з master на main)?
- git branch -M main
Яка команда дозволяє відправити на віддалений репозиторій гілку, яка була створено локально?
- git push --set -upstream origin
branch_name
- зазвичай git одразу пропонує цю команду за замовчування після команди push, тому залишається тільки скопіювати її і вставити в термінал
Що робить --set upstream?
- встановлює гілку на віддаленому репозиторії origin
- --set-upstream встановлює зв'язок між локальною і віддаленою гілкою для автоматичної синхронізації
За допомогою якої команди можна скопіювати репозиторій собі локально?
- git clone
repo_link
(https or ssh)
Яка різниця між використання https та ssh посилання?
- https вимагає явної авторизації
- з ssh ключем проводиться неявна авторизація (немає потреби кожен раз вводити логін і пароль для підтвердження)
Яка команда дозволяє відобразити які локальні гілки пов'язані з віддаленими гілками?
- git branch -vv
- також ця команда показує інформацію про останні коміти в цих гілках