==git init==
Создает новый пустой Git-репозиторий или реинициализирует существующий. Создает скрытую директорию .git, где хранится вся история и метаданные.
git init # Инициализация репозитория в текущей директории
git init project_name # Создает папку project_name и инициализирует там репозиторий
==git branch==
Управление ветками (создание, удаление, просмотр). Без аргументов показывает список веток.
git branch # Показать список локальных веток (текущая отмечена *)
git branch new_feature # Создать новую ветку ‘new_feature’ (без переключения на неё)
git branch -d old_branch # Удалить ветку (безопасно, если изменения слиты)
git branch -D test_branch # Принудительно удалить ветку (даже если есть несохраненные изменения)
git branch -a # Показать все ветки (локальные и удаленные)
==**git config**==
Настройка параметров Git (имя пользователя, email, алиасы, поведение).
```bash
# Установка имени и почты (глобально для текущего пользователя)
==**git log**==
Показывает историю коммитов текущей ветки.
```bash
git log # Полная история (hash, автор, дата, сообщение)
git log —oneline # Сокращенный вид (hash и сообщение)
git log -p # Показать историю вместе с изменениями в файлах (diff)
git log —graph —all # Показать дерево коммитов всех веток в виде графа
==**git commit**==
Фиксирует проиндексированные изменения (из `git add`) в локальном репозитории.
```bash
git commit -m “Описание изменений” # Создать коммит с сообщением
git commit -am “Описание изменений” # Автоматически добавить отслеживаемые файлы и закоммитить (пропускает git add)
git commit —amend # Изменить последний коммит (сообщение или добавить забытые файлы)
==**git checkout**==
Переключение между ветками или восстановление файлов рабочего дерева.
Примечание: В новых версиях Git частично заменен командами git switch (для веток) и git restore (для файлов), но checkout используется повсеместно.
git checkout develop # Переключиться на ветку ‘develop’
git checkout -b new_feature # Создать ветку ‘new_feature’ и сразу переключиться на неё
git checkout — file.txt # Отменить изменения в файле file.txt (вернуть к состоянию последнего коммита)
git checkout <commit_hash> # Переключиться в состояние конкретного коммита (Detached HEAD)
==**git rm**==
Удаляет файлы из индексной области (staging area) и из рабочей директории.
git rm file.txt # Удалить файл с диска и зафиксировать удаление для следующего коммита
git rm -r folder_name # Рекурсивное удаление папки
git rm —cached file.txt # Удалить файл только из отслеживания Git, но оставить его на диске (полезно для .gitignore)
==git remote==
Управляет набором отслеживаемых удаленных репозиториев (remote). Позволяет сохранять короткие имена (алиасы, например, origin) для длинных URL-адресов серверов.
git remote -v # Показать список удаленных репозиториев с их URL (для fetch и push)
git remote add origin # Добавить удаленный репозиторий с именем ‘origin’ по ссылке
git remote remove origin # Удалить связь с удаленным репозиторием ‘origin’
git remote set-url origin <new_url> # Изменить URL для ‘origin’ (например, при смене протокола с HTTPS на SSH)
git remote rename origin upstream # Переименовать алиас ‘origin’ в ‘upstream’
git remote show origin # Показать подробную информацию о ветках и настройках конкретного репозитория
==git push==
Отправляет зафиксированные изменения (коммиты) из локального репозитория в удаленный. Обновляет указатели веток в удаленном репозитории. Раньше принимал логин + пароль, сейчас принимает логин + ключ.
git push # Отправить изменения текущей ветки в привязанную удаленную ветку (upstream)
git push origin main # Отправить ветку ‘main’ в репозиторий ‘origin’
git push -u origin new_branch # Отправить ветку и запомнить связь (set-upstream), чтобы в будущем писать просто git push
git push —force # Принудительная отправка (переписывает историю удаленного репозитория, опасно)
git push —force-with-lease # Более безопасный вариант force push (не перезапишет, если кто-то другой обновил ветку)
git push origin —delete branch # Удалить ветку ‘branch’ в удаленном репозитории
git push —tags # Отправить все теги в удаленный репозиторий
==**git add**==
Добавляет изменения (новые, измененные файлы) в индекс (staging area) для подготовки к следующему коммиту. Это способ сказать Git'у: «Я хочу включить эти изменения в следующую фиксацию».
```bash
git add file.txt # Добавить конкретный файл в индекс
git add . # Добавить все изменения из текущей директории (и подпапок)
git add -A # Добавить вообще все изменения в репозитории (включая удаление файлов)
git add *.py # Добавить все файлы с расширением .py
git add -p # Интерактивный режим (patch): позволяет добавлять не весь файл, а отдельные куски кода
Структура Git репозитория
Структура Git репозитория
\begin{gathered}
Work directory - \text{ Рабочая папка на компьютере.}\
\text{Просто папка в файловой системе, в которой иницилизирован Git репозиторий.}\
\Downarrow\
index - \text{ Как видит эту папку Git.}\
\text{Для commit’а Git берёт то, что последнее занесли в индекс, а не то,}\
\text{что сейчас в рабочей папке.}\
\Downarrow\
Repo - \text{ Сам Git репозиторий.}
\end{gathered}