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}