Что такое commits, branches в Git?qa-69

1. Commits - основа контроля версий

Commit - это снимок состояния вашего проекта в определенный момент времени, который сохраняется в истории Git.

1.1 Характеристики коммитов:

  • Уникальный идентификатор: SHA-1 хэш (например, a1b2c3d...)
  • Неизменяемость: После создания коммит нельзя изменить
  • Структура:
    • Снимок всех файлов (tree)
    • Ссылка на родительский коммит(ы)
    • Автор и дата создания
    • Комментарий (commit message)
# Создание коммита
git add .
git commit -m "Исправлена проверка авторизации"

1.2 Хорошие практики коммитов:

  1. Атомарность: Один коммит = одно логическое изменение
  2. Описательные сообщения:
    Первая строка: краткое описание (<50 символов)
    Пустая строка
    Подробное описание изменений и их причины
    
  3. Частота: Коммитить следует часто, но не "сырой" код

2. Branches - параллельные линии разработки

Branch - это подвижный указатель на коммит, позволяющий вести изолированную разработку.

2.1 Основные концепции веток:

  • Легковесность: Ветка - просто файл с 40-байтным SHA-1
  • Текущая ветка: HEAD - указатель на текущую ветку
  • Основная ветка: Обычно main или master
# Работа с ветками
git branch new-feature    # Создать ветку
git checkout new-feature  # Переключиться
# Или одной командой:
git checkout -b hotfix    # Создать и переключиться

2.2 Стратегии ветвления:

  1. Feature branches: Для новой функциональности
    git checkout -b feature/login-page
    
  2. Release branches: Для подготовки релиза
  3. Hotfix branches: Для срочных исправлений

3. Взаимодействие commits и branches

3.1 Визуализация истории

git log --oneline --graph --all
* a1b2c3d (HEAD -> main) Добавлены тесты API
| * e4f5g6h (feature/auth) Реализована OAuth
|/
* i7j8k9l Инициализация проекта

3.2 Пример рабочего процесса:

  1. Создать ветку для задачи
  2. Сделать несколько коммитов
  3. Объединить с основной веткой
# Пример полного цикла
git checkout -b bugfix/header
# Вносим изменения...
git add .
git commit -m "Исправлен заголовок страницы"
git checkout main
git merge bugfix/header

4. Продвинутые возможности

4.1 Перемещение между коммитами

git checkout a1b2c3d  # Перейти к конкретному коммиту
git checkout main     # Вернуться к ветке

4.2 Временное сохранение изменений

git stash       # Сохранить незакоммиченные изменения
git stash pop   # Вернуть изменения

5. Применение в QA процессе

  1. Ветки для тестов:
    git checkout -b tests/login-validation
    
  2. Тегирование версий:
    git tag -a v1.2.0-rc1 -m "Кандидат на релиз для тестирования"
    
  3. Анализ истории:
    git blame test_login.py  # Кто и когда менял тест
    

Резюмируем:

Commits - это фундаментальные "снимки" изменений, а branches - инструмент для параллельной разработки. Понимание этих концепций критически важно для эффективной работы в команде и организации качественного процесса тестирования.