129 слов | 1 минута

Шпаргалка по командам Git

Справочник основных команд Git для ежедневной разработки: работа с ветками, индексом, историей коммитов и удалёнными репозиториями.

Примечание: HEAD указывает на текущее состояние файлов в рабочей директории.

Ветки и слияние

Git позволяет вести параллельную разработку через ветки. По завершении работы ветку сливают обратно в основную — все её коммиты становятся частью main.

Merge vs Rebase

Merge сохраняет полную историю и хронологический порядок коммитов:

# переходим в ветку, куда хотим слить
git checkout main
git merge feature/12345

Rebase перемещает коммиты ветки поверх целевой, создавая линейную историю:

git checkout main
git rebase feature/12345

В проекте используется ветка main (боевые сайты) и feature-ветки для задач. Ветка develop используется для крупных задач (новый дизайн, тестирование на отдельном домене).

Основные команды

# добавить все изменения в индекс
git add .

# посмотреть статус рабочей директории
git status

# создать коммит
git commit -m "текст коммита"

# посмотреть список веток
git branch

# создать ветку
git branch dev

# переключиться на ветку
git checkout 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

# слить ветку dev в main
git checkout main
git merge dev

# отправить изменения в GitLab
git push

# получить изменения из GitLab
git pull

Удаление файла из истории

Используется, если в репозиторий случайно попал файл с чувствительными данными:

# удалить файл из всех коммитов истории
git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch <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 "удаляет файл из отслеживания"
git push origin {branch name}