Git

 cd <to dir you want to make git>

 git config --global user.name "samuel-edmund-morgan"
 git config --global user.email "samuel.edmund.morgan@gmail.com"
 git init -b main (or git clone <repo> if someone's else repo)
#also you can view all git settings in ~/.gitconfig file

 #<add or create files in this dir>

 git add . #or name of the file
 # to undo changes in file use git restore

 git commit -m "Init commit"
 #<create github repo>
 #<share ssh keys in Settings>
 git remote add origin git@github.com:samuel-edmund-morgan/DocumentCleaner.git
 git remote -v
 git push -f origin main


 #<Now make changes in files>

 git add .
 git commit -m "Something have been done"
 git push  origin main



git log
#--shows comit history--

git status 
#--It will show status of files or whether directory upon control of git--


git pull
#--updates changes from repos--

git checkout -b [name_of_your_new_branch]
#--creates new branch for you and makes it current-- 
#or
git branch newname
#creates new branch

git branch -m main
#renames master to main (if master is current)

git checkout <commit id like aa43ce3442fhd>/<or branch name>
#or
git checkout master #to move back to master
#--navigate through commits



git push origin [name_of_your_new_branch]
#--pushes (after git commit) changes to repo in different branches--


git branch
#shows all branches

#Потрібно працювати не в main (master) а для окремих фіч робити окремі гілки, працювати в гілках, і після того як все буде зроблено в гілці і перевірено на роботоздатність - перейти в main і зробити git merge
git checkout main (#or master)
git merge [name_of_your_branch]

Якщо випадково в main(master) попало те що там бути не повинно було то можна відкатити зміни двома способами:
1) git revert [hash_of_commit_to_undo] #(щоб побачити хеші git status попередньо)
2) git reset [hash_of_commit_to_navigate] #(хеш коміту ДО якого хочу повернутись)


#Можна відкатитись на пару комітів назад (^^) і видалити у файлах зроблені зміни (--hard):
git reset HEAD^^ --hard


#Коли багато різних бренчів то часто структура комітів виглядає дуже розгалужено, тому роблять git rebase щоб структура була лінійною:

git rebase -i main.   #інтерактивний ребейс

ПРАВИЛО: Одна фіча - один коміт в основну мейн гілку.

Якщо треба скасувати зміни, внесені у файл, який ще не додано в індекс, можна виконати команду:

git restore file_name

Якщо файл помилково додано в індекс, слід виконати команду:

git restore --staged file_name
Команда Опис
git config --global ... Встановити глобальні параметри Git
git init Ініціалізувати новий Git репозиторій у поточній директорії
git status Показати інформацію про репозиторій
git add ./path/to/files Підготувати зміни файлу для збереження
git restore file_name Скасувати зміни в модифікованому файліfile_name
git restore --staged file_name Видалити файлfile_name з індексу
git commit Відкрити текстовий редактор, щоб ввести повідомлення для коміту та зберегти зміни в індексі
git commit -m 'do something' Зберегти зміни із вказаним повідомленням
git commit -am 'do something' Підготувати всі змінені файли та зберегти із вказаним повідомленням
git log Показати історію комітів
git lg Аліас, який ми створили дляlog
git branch Показати всі гілки
git branch branch_name Створити нову гілкуbranch_name
git branch -D branch_name Видалити гілкуbranch_name
git checkout hash-or-branch Перейти на іншу гілку або хеш коміту
Команда Опис
git branch Показати всі гілки
git branch new_branch Створити нову гілку з назвоюnew_branch
git branch -m new_name Перейменувати поточну гілку наnew_name
git branch -d branch_name Видалити неактивну гілку
git checkout branch_name Перейти з поточної гілки на гілкуbranch_name
git switch branch_name Перейти з поточної гілки на гілкуbranch_name
git checkout -b new_branch Створити гілкуnew_branch та одразу перейти на неї
git switch -c new_branch Створити гілкуnew_branch та одразу перейти на неї
git merge branch_name Об'єднатиbranch_name з поточною гілкою
git revert hash_of_commit Створити новий коміт зі змінами протилежними змінам у вибраному коміті
git reset hash_of_commit Переставити гілку на вказаний коміт
git reset HEAD^^ --hard Переставити активну гілку на 2 коміти назад та видалити всі зміни в файлах
git rebase branch_name Перебудувати зміни з поточної гілки підbranch_name. Усі коміти поточної гілки будуть перебудовані під branch_name
git rebase -i branch_name Перебудувати зміни з поточної гілки підbranch_name. Лише вибрані коміти поточної гілки будуть перебудовані під branch_name
git restore file_name Видалити непідготовлені зміни до коміту вfile_name
git restore --staged file_name Видалити підготовлені зміни до коміту вfile_name
git restore -SW Видалити всі зміни у файлах (підготовлені та непідготовлені до коміту)
git commit --amend Замінити поточний коміт на інший

Git signing with Yubikey:

git config --global user.email "samuel.edmund.morgan@icloud.com"
git config --global user.name "Samuel Morgan"
git config --global user.signingkey EAFEC4BBF49CC2FA
git config --global commit.gpgsign true

#On Mac
#git config --global gpg.program gpg

#On Windows
git config --global gpg.program "C:\\Program Files (x86)\\GnuPG\\bin\\gpg.exe"

GPG Suite and Yubikey Manager (at least cli version) must be installed

In VSCode in command palette (Command + Shift + P) enter "Open User Settings" and enter:

{
"git.enableCommitSigning": true,
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 500,
"git.enableSmartCommit": true
}