Репозиторий
# Создание нового репозитория
git init
# Клонирование существующего репозитория
git clone <url>
Коммит (commit)
# Создание коммита
git commit -m "Сообщение коммита"
# Просмотр истории коммитов
git log
Ветки (branches)
# Создание новой ветки
git branch <имя_ветки>
# Переключение на ветку
git checkout <имя_ветки>
# или
git switch <имя_ветки>
# Создание и переключение на новую ветку
git checkout -b <имя_ветки>
# или
git switch -c <имя_ветки>
# Просмотр всех веток
git branch
HEAD
# Просмотр, на что указывает HEAD
git rev-parse HEAD
# Переключение HEAD на определенный коммит (detached HEAD state)
git checkout <хеш_коммита>
Добавление файлов в индекс
# Добавление файла в индекс
git add <файл>
# Добавление всех измененных файлов
git add .
# Интерактивное добавление
git add -i
Проверка статуса
# Проверка статуса репозитория
git status
# Краткий статус
git status -s
Просмотр изменений
# Просмотр неиндексированных изменений
git diff
# Просмотр индексированных изменений
git diff --staged
Отмена изменений
# Отмена изменений в рабочей директории
git checkout -- <файл>
# или
git restore <файл>
# Отмена индексации
git reset HEAD <файл>
# или
git restore --staged <файл>
Изменение последнего коммита (amend)
# Изменение сообщения последнего коммита
git commit --amend -m "Новое сообщение"
# Добавление изменений в последний коммит
git add <файл>
git commit --amend --no-edit
Получение SHA коммита
# Получение полного SHA текущего коммита
git rev-parse HEAD
# Получение короткого SHA
git rev-parse --short HEAD
# Просмотр SHA коммитов в истории
git log --onelin
Сброс (reset)
# Мягкий сброс (сохраняет изменения в рабочей директории)
git reset --soft HEAD~1
# Смешанный сброс (сохраняет изменения, но не в индексе)
git reset HEAD~1
# Жесткий сброс (удаляет все изменения)
git reset --hard HEAD~1
Поиск автора кода (blame)
# Просмотр авторов строк в файле
git blame <файл>
# С ограничением по строкам
git blame -L 10,20 <файл>
Поиск в коде (grep)
# Поиск строки во всех файлах
git grep "строка_для_поиска"
# Поиск с учетом контекста
git grep -n "строка_для_поиска"
# Поиск только в определенных файлах
git grep "строка_для_поиска" -- "*.js"
Слияние (merge)
# Слияние ветки в текущую
git merge <имя_ветки>
# Слияние с созданием коммита слияния (no fast-forward)
git merge --no-ff <имя_ветки>
# Отмена слияния
git merge --abort