138 слов | 1 минута
Шпаргалка
Git хранит историю разработки проекта, разбивая её на некоторые ключевые точки - коммиты. Но также он позволяет отклониться от основной линии разработки и продолжить работу в отдельной ветке, независимо от основной

HEAD указывает на текущее состояние файлов
По окончанию работы в отдельной ветке, ее можно будет слить обратно в основную, и все коммиты, сделанные в отдельной ветке так же, появятся и у основной.
Отличия Merge от Rebase
В принципе слияния веток:
# переходим в ветку _куда_ хотим сливать
git checkout main
# сохраняем полную историю и хронологический порядок
git merge feature/12345

# переходим в ветку _куда_ хотим сливать
git checkout main
# сохраняем хронологический порядок
git rebase feature/12345

У нас так же используется ветвление, где главная ветка называется main (код из этой ветки располагается на боевых сайтах). Работа над задачами же происходит в отдельных, feature ветках, которые создаются ответвлением из main.
Так же может быть ветка develop, код которой располагается на тестовых версиях сайтов. Туда попадают большие задачи по типу нового дизайна сайта с целью протестировать и показать заказчику новую версию сайта на отдельном тестовом домене.
Основные команды
# добавление файлов в индекс
git add .
# посмотреть статус
git status
# коммит
git commit - m "text commit"
# посмотреть какие ветки есть
git branch
# создать ветку
git branch dev
# переключиться на нее
git checkuot dev
# показать изменения с последнего коммита (пока не в индексе и не в коммите)
git diff file01
# показать изменения с последнего коммита (в индексе и не в коммите)
git diff --staged file01
# откатить файл последнего коммита (пока не в индексе и не в коммите)
git restore file01
# откатить файл последнего коммита (в индексе и не в коммите)
git restore --staged file01
# посмотреть, что изменено в коммите
git show 435hh5345h34k5345435h345h
# перенести HEAD на коммит чтобы посмотреть состояние файлов на тот момент
git checkout 435hh5345h34k5345435h345h
git checkout main
# откатить файлы на состояние коммита
git reset --hard 435hh5345h34k5345435h345h
# если передумали
git reset --hard ORIG_HEAD
# слияние с main:
git checkuot main # перемещаемся в main
git merge dev # мержим dev в main
# закидываем на GitLab
git push
# забираем с GitLab
git pull
# удаление из всех коммитов
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch <myfile>' \ # заменяем `<myfile>` на название файла который нужно вычистить из репы
--prune-empty --tag-name-filter cat -- --all
git push origin --force --all
git push origin --force --tags
# удаление файла из отслеживания
git rm --cached --ignore-unmatch <myfile> # удаляем файл только из репозитория, и физически файл сохранится на диске
git commit -am "Message"
git push origin {branch name}