An open API service indexing awesome lists of open source software.

https://github.com/frontendlovers/git-for-beginners

Вичерпний конспект для самоперевірки по курсу Нікіти Тимошенка "ПОВНИЙ КУРС по GIT та GITHUB українською"
https://github.com/frontendlovers/git-for-beginners

command-line git git-bash github shell

Last synced: 2 months ago
JSON representation

Вичерпний конспект для самоперевірки по курсу Нікіти Тимошенка "ПОВНИЙ КУРС по GIT та GITHUB українською"

Awesome Lists containing this project

README

        

# GIT GIT logo

Вітаю! ✨
Цей репозиторій містить вичерпний конспект, який я створила під час проходження курсу Нікіти Тимошенка про [Git та GitHub](https://www.youtube.com/watch?v=9CnZihyYjjA&list=WL&index=2&t=1s)

📌 Конспект у форматі питання-відповіді, щоб ви могли перевірити себе та швидко знаходити потрібну інформацію.

📌 Структура наближена до курсу, тож вам буде легко орієнтуватися в темах і знаходити потрібний матеріал.

📌 Раджу пройти сам [курс](https://www.youtube.com/watch?v=9CnZihyYjjA&list=WL&index=2&t=1s) та прочитати [конспект від Нікіти](https://github.com/NickTimosh/git_course/tree/main/notebooks) адже там багато корисного:

- детальний опис команд,
- практичні завдання,
- корисні посилання.

✨ А цей конспект допоможе вам перевірити, наскільки добре ви засвоїли отримані знання! 🚀

Якщо є якісь зауваження, або пропозиції для покращення не соромтесь створювати issues або pull requests. Я відкрита до зворотного зв'язку 🙌

Легкого навчання!😊

---

Зміст

Командний рядок

Git

GitHub

---

Комадний рядок

[Конспект](https://github.com/NickTimosh/git_course/blob/main/notebooks/1.%20%D0%92%D1%81%D1%82%D1%83%D0%BF%20%D0%B2%20%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%B8%D0%B9%20%D0%A0%D1%8F%D0%B4%D0%BE%D0%BA.md)

Командний рядок — терміни

Що таке GUI?

- графічний інтерфейс користувача (Graphical User Interface)
- спосіб взаємодії користувача з комп'ютером із використанням графічних елементів (вікна, кнопки і тд)

Що таке Сommand Line?

- командний рядок
- текстовий інтерфейс для взаємодії з операційною системою
- простір, де вводяться текстові команди
- і тут же можуть викликатися і запускатися певні програми

Що таке термінал?

- програма або інструмент, який надає доступ до командного рядка (вікно, куди команди вводяться)

Що таке Shell?

- оболонка
- програма, яка виконує команди, введені у терміналі (інтерпретатор команд)

Принцип роботи Shell (схема)

Schematic of the principle of shell operation

Що таке Bash?

- один із типів оболонок (Shell)
- Bourne Again Shell (Bash)
- підтримується у Windows через Git Bash

Взаємодія з ОС (схема)

Diagram of the stages of interaction with the operating system

---

Файлова система — терміни

Що таке каталог (директорія)?

- структура, яка використовується для організації файлів у файловій системі

Що таке поточний каталог?

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

Що таке батьківський каталог?

- папка, що знаходиться на один рівень вища, за поточний

Що таке домашній каталог?

- персональний каталог користувача
- Диск С —> Users —> User name (або USER)

Що таке кореневий каталог?

- початкова точка файлової системи
- найвищий рівень ієрархії каталогів

Структура каталогів (схема)

Directory structure

---

Шлях до файлів

Що таке шлях (path)?

- адреси файлів у каталозі файлової системи

Які є два види шляхів до файлів?

- абсолютний
- відносний

Де починається абсолютний шях?

- з кореневого каталогу

Що визначає відносний шях?

- розташування файлу по відношенню до поточного каталогу

Що таке розширення файлів?

- частина назви файлу, що йде після крапки

Для чого потрібне розширення файлів?

- для визначення типу файлу

---

Командний рядок — читання вмісту папок (команди)

[Конспект](https://github.com/NickTimosh/git_course/blob/main/notebooks/2.%20git%20bash%20-%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8.md)

[Практичні завдання](https://github.com/NickTimosh/git_course/blob/main/notebooks/3.%20git%20bash%20-%20%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0.md)

Яка команда відображає вміст всієї папки, у якій знаходиться користувач?

- 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

---

Командний рядок — взаємодія з папками (команди)

[Конспект](https://github.com/NickTimosh/git_course/blob/main/notebooks/2.%20git%20bash%20-%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8.md)

[Практичні завдання](https://github.com/NickTimosh/git_course/blob/main/notebooks/3.%20git%20bash%20-%20%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0.md)

Яка команда показує поточну директорію?

- 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

---

Командний рядок — взаємодія з файлами (команди)

[Конспект](https://github.com/NickTimosh/git_course/blob/main/notebooks/2.%20git%20bash%20-%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8.md)

[Практичні завдання](https://github.com/NickTimosh/git_course/blob/main/notebooks/3.%20git%20bash%20-%20%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0.md)

Яка команда створює файл?

- touch `file_name.extension`

Як команда дозволяє скопіювати файл і перенести його до іншої папки?

- cp `copy_file destination_directory/`
- copy

Яка команда дозволяє записати щось у файл?

- echo `print_something` > `in_file`

Яка команда дозволяє повернути вміст файлу?

- cat `file_name`

Яка команда дозволяє видалити файл?

- rm `file_name`

---

Git

Git — короткий огляд

Що таке Git?

- програмне забезпечення
- система контролю версій (VCS — version control system)
- відстежує зміни у файлах
- дає змогу повернутися до попередніх версій
- забезпечує зручну співпрацю команд

Що пропонує Git?

- локальну базу даних
- синхронізацію з іншими серверами
- відновлення даних у разі збою

Які основні стани файлів у Git?

1. modified — файл змінено, але не додано до бази даних
2. staged — файл підготовлено до збереження
3. committed — зміни збережено у локальній базі даних

основні стани файлів у Git (схема)

Basic file states

Що робить звичайну папку локальним репозиторієм?

- папка .git

Яка команда ініціалізує репозиторій?

- git init
- після цієї команди з'являється папка .git і наша папка стала репозиторієм

---

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?

- коміти
- збереження усіх версій файлів
- гілки

Що таке коміт?

- збереження файлу (його версії)
- інформація про те:
- хто зберіг
- коли зберіг
- що саме було зроблено
- можливість повернутися до попередніх версій файлів

Як зберігаються в комітах файли, в який не було жодних змін?

- зберігається **посилання** на вихідний файл

Який порядок локального збереження версій файлів?

- git add (staging area)
- git commit (committed area)

Локальне збереження файлів (схема)

Local file storage scheme

Які шляхи вказання шляху до потрібної директорії (команда і два варіанти відображення шляху)?

- команда — **cd**
- відображення шляху:
- перетягти папку у вікно git bash (і шлях відобразиться, треба тільки cd на початку дописати)
- написати повністю шлях самостійно

Які каталоги git не відстежує?

- в яких немає файлів, або файлів, які ігноруються через .gitignore

---

Git — основні команди

[Конспект](https://github.com/NickTimosh/git_course/blob/main/notebooks/5.%20git%20-%20%D0%91%D0%B0%D0%B7%D0%BE%D0%B2%D1%96%20%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8.md)

Додавання коду і коміти

Як додати усі файли однією командою у staging area?

- git add .

Як додати один файл у staging area?

- git add `file_name`

Як додати коротке повідомлення до коміту?

- git commit -m `"your_comment"`
- вказується коротко, які зміни зроблено

Внесення комітів через Wim (схема)

Commit scheme via Wim

Внесення комітів через nano (схема)

Commit scheme via Wim

Внесення комітів через notepad (схема)

Commit scheme via Wim

Як змінити текстовий редактор і встановити його основним (команда)?

- git config --global core.editor `"your_editor"

Історія комітів

Яка команда виводить перелік всіх комітів?

- git log

Який прапорець дозволяє вивести історію у більш компактному вигляді?

- --oneline
- повний варіант команди: git log --oneline

Яка команда (з прапорцем) дозволяє подивитися зміни комітів?

- git log -p

Як вийти з інтерактивного режиму (яка клавіша)?

- q (маленька)

Яка команда дозволяє подивитись відмінності у файлах (і всього репозиторію)?

- git diff (difference)

---

Git — розширення основ

[Конспект](https://github.com/NickTimosh/git_course/blob/main/notebooks/6.%20git%20-%20%D0%A0%D0%BE%D0%B7%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%20%D0%9E%D1%81%D0%BD%D0%BE%D0%B2.md)

Яка загальноприйнята практика формулювання повідомлень для комітів?

- наказова (імперативна) форма
- (add, write, remove, delete, change, fix etc.)

Як додати тіло коміту, щоб детальніше описати зміни (послідовність кроків)?

- не закривати лапки
- клікнути enter
- перейти на новий рядок
- продовжити писати
- закрити лапки
- enter (для відправки коміту)

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

- git add .
- git commit --amend --no-edit (замість повідомлення)
- enter

Різниця у кроках між створення нового коміти і зміною існуючого (схема)

Diagram of the difference in steps between creating a new commit and modifying an existing one

Як накопичувати зміни з різних файлів для одного коміту?

- внести зміни в різні файли та/або створити нові файли
- git add . (додаємо всі файли)
- git commit -m `"your_commit"`

Як додати кілька файлів (не всі) за один раз до staging area?

- git add ` `

Як побачити різницю у файлах, що вже додані до staging area?

- git diff --chached

Як повернути файли зі staging area до working area?

- **після** git add але **до** git commit
- git restore --staged or path to file

Як подивитися, який саме невідстежуваний файл користувач планує видалити (який прапорець)?

- -n
- повна команда: git clean -n

Яка команда дозволяє видалити невідстежувані файли з git (з прапорцем)?

- git clean -f

Яка команда дозволяє видалити невідстежувані файли і каталоги з git (з прапорцем)?

- git clean -fd
- **ця команда незворотна**

Яка команда дозволяє видалити відстежувані файли з індексу та робочого каталогу?

- git rm `` (remove)

Яка команда дозволяє видалити відстежувані файли тільки з індексу, залишивши його у робочому каталозі (з прапорцем)?

- git rm --cached ``

---

Git — вступ до відновлення версій

[Конспект](https://github.com/NickTimosh/git_course/blob/main/notebooks/7.%20git%20-%20%D0%A0%D0%BE%D0%B1%D0%BE%D1%82%D0%B0%20%D0%B7%20%D0%9A%D0%BE%D0%BC%D1%96%D1%82%D0%B0%D0%BC%D0%B8.md)

Що зберігається в комітах?

- зміни, що були зроблені у файлах

Що має унікальне кожна нова версія файлів?

- "#" — хеш-код (як id)
- є унікальним для кожної версії файлу

Основні area (схема)

Scheme of the main area files in git

Яка команда дозволяє повернути закомічений файл (наприклад, після його видалення)?

- 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 — вступ в git branch

[Конспект]()

Яка основна гілка проєкту?

- main (master) — різна назва, але значить одне й те саме

Принцип роботи гілок (схема)

Diagram of how branches work in git

HEAD

Що таке HEAD?

- вказівник того, де ми знаходимось
- в якій гілці
- в якому коміті
- за замовчуванням знаходимося в останньому коміті
- кожна окрема гілка має свій HEAD

Що означає "detached HEAD"?

- коли `HEAD` не вказує на останній коміт гілки, а вказує на конкретний коміт або тег

За допомогою якої команди HEAD переходить у стан detached HEAD?

- git checkout `commit_hash`
- у цьому випадку `HEAD` вказує на той коміт, а не на гілку

Що дає detached HEAD?

- У стані detached HEAD можна переглядати або тестувати код на певному коміті, але будь-які нові коміти, які будуть зроблені, не будуть пов'язані з жодною гілкою
- для збереження коміту, що був зроблений у цьому стані, потрібно створити нову гілку, щоб не втратити зміни

Як вийти зі стану "detached HEAD"?

- використати команду `git checkout `, де `` — це назва гілки, на якій ви хотіли б продовжити працювати

Принцип роботи HEAD (схема)

Schematic diagram of the HEAD operating principle

Конфлікти

Що таке конфлікти в git?

- ситуація, коли на одних і тих самих рядках, в одних і тим самих файлах вказані різні дані

Що значить "вирішити конфлікт"?

- конкретне вказання git, які саме зміни мають бути внесені

Merge vs Rebase

Що значить merge?

- впровадити зміни до основої гілки (об'єднати всі додаткові гілки в main)

Яка є альтернативна merge?

- rebase

Що дозволяє робити ця альтернатива?

- інтегрувати зміни **після** останньої актуальної версії в main гілці

Які складнощі пов'язані з цим способом?

- перезапис id деяких комітів, що може викликати певні складнощі, якщо виникне потреба відновити якісь попереднії версії

Різниця між merge і rebase (схема)

Diagram of the difference between merge and rebase

Гілки

Яка команда виведе список всіх гілок?

- якщо потрібно побачити тільки локальні гілки
- 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 чи ще ні (безумовне видалення гілки)

---

GitHub

GitHub — короткий огляд