- Андрей Куманяев/
- Git: руководства и команды/
- Основы Git: краткая шпаргалка по ключевым концепциям и командам/
Основы Git: краткая шпаргалка по ключевым концепциям и командам
Git может показаться сложным, но его основные концепции просты. Если вы только начинаете — эта шпаргалка покроет всё необходимое для повседневной работы. Если вы уже знакомы с Git — используйте её как быстрый справочник.
Ключевые концепции Git #
Репозиторий (Repository) — папка проекта с историей Git. Физически хранится в скрытой папке .git. Это база данных всех версий проекта.
Рабочая директория (Working Directory) — папка вашего проекта, где вы редактируете файлы. То, что вы видите в файловой системе.
Индекс / Staging Area — промежуточная область, где вы выбираете, какие изменения включить в следующий коммит. «Зал ожидания» перед сохранением.
Коммит (Commit) — снимок состояния проекта в определённый момент с описанием изменений. Неизменяемая запись в истории.
Ветка (Branch) — параллельная линия разработки. По сути это просто указатель на конкретный коммит.
Указатель HEAD — указатель на текущую ветку и коммит. Показывает «где вы сейчас находитесь» в истории.
Слияние (Merge) — объединение изменений из одной ветки в другую.
Удалённый репозиторий (Remote) — копия проекта на сервере (GitHub, GitLab и т.д.). Origin — стандартное имя для основного удалённого репозитория.
Push — отправка локальных коммитов на удалённый репозиторий.
Pull — получение изменений из удалённого репозитория и слияние с локальным.
Жизненный цикл файла в Git #
Untracked (не отслеживается)
↓ git add
Staged (подготовлено для коммита)
↓ git commit
Committed (зафиксировано в истории)
↓ редактирование файла
Modified (изменено, но не подготовлено)
↓ git add
Staged
↓ git commit
...
Новый файл начинает жизнь как Untracked — Git его не знает. После git add он становится Staged. После git commit — Committed. При изменении переходит в Modified, и цикл повторяется.
Типичный рабочий процесс #
- Создайте репозиторий:
git initилиgit clone - Отредактируйте файлы
- Подготовьте изменения:
git add - Создайте коммит:
git commit -m "сообщение" - Повторяйте шаги 2–4
- Отправьте на сервер:
git push - Получите изменения коллег:
git pull
Основные команды Git #
# Инициализация и клонирование
git init # Создать новый репозиторий
git clone <url> # Скачать репозиторий с сервера
# Проверка статуса
git status # Посмотреть изменения
git diff # Посмотреть разницу в файлах
git log # Посмотреть историю коммитов
git log --oneline # История в компактном виде
git log --graph --oneline --all # Граф всех веток
# Подготовка и фиксация
git add <файл> # Добавить файл в staging
git add . # Добавить все изменения
git commit -m "сообщение" # Создать коммит
git commit -am "сообщение" # Добавить изменённые и закоммитить
# Ветки
git branch # Список веток
git branch <имя> # Создать ветку
git switch <ветка> # Переключиться на ветку
git switch -c <ветка> # Создать и переключиться
git merge <ветка> # Объединить ветку в текущую
git branch -d <ветка> # Удалить ветку
# Синхронизация с сервером
git remote -v # Посмотреть удалённые репозитории
git push origin <ветка> # Отправить на сервер
git pull origin <ветка> # Получить и объединить
git fetch origin # Получить изменения без слияния
# Откат изменений
git revert <коммит> # Отменить коммит (создаёт новый коммит)
git reset HEAD~1 # Отменить последний коммит (изменения остаются)
git restore <файл> # Отменить изменения в файле
Структура хорошего сообщения коммита #
<тип>: краткое описание (до 50 символов)
Подробное объяснение если нужно.
Объясняйте ЧТО и ПОЧЕМУ, не КАК.
Refs: #123
Хорошее сообщение коммита имеет структуру: первая строка — краткое описание до 50 символов, вторая строка — пустая разделитель, остальные строки — подробное объяснение до 72 символов.
# Плохие сообщения коммитов
git commit -m "обновление"
git commit -m "фиксы"
git commit -m "асдфасдф"
# Хорошие сообщения коммитов
git commit -m "feat: добавлена функция авторизации через OAuth2"
git commit -m "fix: исправлена ошибка валидации email в форме регистрации"
git commit -m "docs: обновлена документация по API"
Типы для Conventional Commits: feat, fix, docs, style, refactor, perf, test, chore, ci.
Работа с ветками #
Ветки используются для: разработки новых функций без влияния на основной код, исправления ошибок в изоляции, параллельной работы нескольких разработчиков.
Типичная схема веток:
main # основная ветка, готовый код
develop # ветка для разработки (в Git Flow)
feature/... # ветка для новой функции
bugfix/... # ветка для исправления ошибки
hotfix/... # срочное исправление в production
release/... # ветка подготовки релиза
Конфликты слияния #
Когда Git не может автоматически объединить ветки (изменения в одной строке из разных веток), происходит конфликт.
Признак конфликта в файле:
<<<<<<< HEAD
ваше изменение
=======
их изменение
>>>>>>> feature/branch
Решение: отредактируйте файл вручную, выберите нужное изменение (или совместите оба), удалите маркеры конфликта, сохраните и создайте коммит.
Практический сценарий работы #
# Начало работы над новой функцией
git switch -c feature/user-profile
# Редактирование файлов (в IDE)
# Проверка статуса
git status
# Подготовка изменений
git add src/user-profile.js
git add styles/user-profile.css
# Создание коммита
git commit -m "feat: добавлена страница профиля пользователя
- Создан компонент UserProfile
- Добавлены стили для адаптивного дизайна
- Интегрирована загрузка данных из API"
# Отправка на сервер
git push origin feature/user-profile
# После одобрения Pull Request — слияние в main
git switch main
git pull origin main
# Удаление локальной ветки
git branch -d feature/user-profile
Часто задаваемые вопросы #
Что такое HEAD в Git? HEAD — это указатель на текущий коммит, на котором вы находитесь. Обычно указывает на последний коммит текущей ветки. В режиме detached HEAD указывает прямо на коммит.
В чём разница между fetch и pull? git fetch получает изменения с сервера, но не сливает их. git pull = git fetch + git merge. Используйте fetch когда хотите посмотреть изменения перед слиянием.
Как переименовать ветку? git branch -m старое-имя новое-имя. Для переименования текущей ветки: git branch -m новое-имя.
Можно ли удалить ветку? Да, git branch -d имя-ветки. Флаг -d не удалит ветку, если она не слита. Для принудительного удаления используйте -D.
Что такое .gitignore? Файл, в котором указаны паттерны файлов и папок, которые Git не должен отслеживать. Подробнее в статье .gitignore: полное руководство.
Заключение #
Основы Git просты: репозиторий, коммиты, ветки, синхронизация. Овладейте этими концепциями — и 90% повседневных задач будут решаться легко. Для практики прямо в браузере — пройдите интерактивный тур по Git. Для углублённого изучения читайте полное руководство по git commit и другие статьи этого блога.