Первоначальная настройка

Настройка информации о пользователе для всех локальных репозиториев

git config --global user.name "имя" # Установка имени
git config --global user.email "адрес электронной почты" # Установка почты

Создание репозитория

git init

Можно так же в команде после init написать название для репозитория, по умолчанию используется имя папки в котором создается репозиторий.

git clone [url-адрес]

Скачивает репозиторий.

Внесение изменений

git status - перечисляет все новые или изменённые файлы, которые нуждаются в фиксации

git diff - показывает различия по внесённым изменениям в ещё не проиндексированных файлах

git add [файл] - индексирует указанный файл для последующего коммита (добавляет файл в список на коммит)

git diff --staged - показывает различия между проиндексированной и последней зафиксированной версиями файлов

git reset [файл] - отменяет индексацию указанного файла, при этом сохраняет его содержимое

git commit -m "[сообщение с описанием]" - фиксирует проиндексированные изменения и сохраняет их в историю версий

Ветки

git branch - список веток репозитория с указанием выбранной ветки

git branch [имя ветки] - создаёт новую ветку

git switch -c [имя ветки] - переключается на выбранную ветку и обновляет рабочую директорию до её состояния

git merge [имя ветки] - вносит изменения указанной ветки в текущую ветку

git branch -d [имя ветки] - удаляет выбранную ветку

Операции с файлами

git rm [файл] - удаляет конкретный файл из рабочей директории и индексирует его удаление

git rm --cached [файл] - убирает конкретный файл из контроля версий, но физически оставляет его на своём месте

git mv [оригинальный файл] [новое имя] - перемещает и переименовывает указанный файл, сразу индексируя его для последующего коммита

Удалить файл из истории репозитория

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

Игнорирование некоторых файлов

*.log
build/
temp-*

Git будет игнорировать файлы и директории, перечисленные в файле .gitignore с помощью wildcard синтаксиса.

git ls-files --others --ignored --exclude-standard - список всех игнорируемых файлов в текущем проекте

Сохранение фрагментов

git stash - временно сохраняет все не зафиксированные изменения отслеживаемых файлов

git stash pop - восстанавливает состояние ранее сохранённых версий файлов

git stash list - выводит список всех временных сохранений

git stash drop - сбрасывает последние временно сохраненныe изменения

Просмотр истории

git log - история коммитов для текущей ветки

git log --follow [файл] - история изменений конкретного файла, включая его переименование

git diff [первая ветка]...[вторая ветка] - показывает разницу между содержанием коммитов двух веток

git show [коммит] - выводит информацию и показывает изменения в выбранном коммите

Откат коммитов

git reset [коммит] - отменяет все коммиты после заданного, оставляя все изменения в рабочей директории

$ git reset --hard [коммит] - сбрасывает всю историю вместе с состоянием рабочей директории до указанного коммита.

Откат репозитория с сохранением истории

git fetch origin
git checkout 8e730b8439 -- .
git commit -am "Откат на комит 8e730b8439"
git push origin HEAD

Синхронизация с удалённым репозиторием

git fetch [удалённый репозиторий] - скачивает всю историю из удалённого репозитория

git merge [удалённый репозиторий]/[ветка] - вносит изменения из ветки удалённого репозитория в текущую ветку локального репозитория

git push [удалённый репозиторий] [ветка]- загружает все изменения локальной ветки в удалённый репозиторий

git pull - загружает историю из удалённого репозитория и объединяет её с локальной. pull = fetch + merge