← JavaScript/Git: ветки и слияние#194 из 383← ПредыдущийСледующий →+25 XP
Полезно по теме:Гайд: как учить JavaScriptПрактика: JS базаПрактика: async и сетьТермин: Closure

Git: ветки и слияние

Зачем нужны ветки

Ветки позволяют:

  • Изолировать работу — каждая фича в своей ветке
  • Параллельная разработка — несколько человек не мешают друг другу
  • Безопасные эксперименты — можно удалить ветку если не получилось
  • Code review — Pull Request перед слиянием
  • Основные команды веток

    Создание и переключение

    # Посмотреть все ветки
    git branch
    
    # Создать новую ветку
    git branch feature/auth
    
    # Переключиться на ветку
    git checkout feature/auth
    
    # Создать и переключиться (сокращённо)
    git checkout -b feature/auth
    
    # Новый синтаксис (Git 2.23+)
    git switch feature/auth
    git switch -c feature/new-branch

    Просмотр веток

    # Локальные ветки
    git branch
    
    # Все ветки (включая remote)
    git branch -a
    
    # Ветки с последним коммитом
    git branch -v

    Удаление веток

    # Удалить слитую ветку
    git branch -d feature/auth
    
    # Принудительное удаление (не слита)
    git branch -D feature/auth
    
    # Удалить remote ветку
    git push origin --delete feature/auth

    Git Flow — модель ветвления

    main (production)
      └── develop (development)
            ├── feature/auth
            ├── feature/dashboard
            └── feature/api

    Типичный workflow

    1. Создать ветку от develop: git checkout -b feature/auth develop

    2. Разработка и коммиты

    3. Push в remote: git push -u origin feature/auth

    4. Pull Request → Code Review

    5. Merge в develop

    6. Удалить ветку

    Слияние веток (merge)

    Fast-forward merge

    Когда в main не было новых коммитов:

    git checkout main
    git merge feature/auth
    # Fast-forward — просто передвигает указатель

    Three-way merge

    Когда в обеих ветках есть новые коммиты:

    git checkout main
    git merge feature/auth
    # Создаётся merge commit

    Конфликты слияния

    Когда Git не может автоматически слить изменения:

    git merge feature/auth
    # CONFLICT (content): Merge conflict in index.js

    Разрешение конфликтов

    // В файле появятся маркеры:
    <<<<<<< HEAD
    console.log("версия из main")
    =======
    console.log("версия из feature/auth")
    >>>>>>> feature/auth
    
    // Нужно вручную выбрать или объединить:
    console.log("финальная версия")
    # После разрешения
    git add index.js
    git commit -m "resolve merge conflict"

    Rebase vs Merge

    Merge — сохраняет историю

    main:    A---B---C---M
                  \     /
    feature:       D---E

    Rebase — линейная история

    git checkout feature/auth
    git rebase main
    # Переносит коммиты feature поверх main
    main:    A---B---C
                      \
    feature:           D'---E'

    Золотое правило: Никогда не делайте rebase публичных веток!

    Практики именования веток

    feature/user-auth        # Новая функциональность
    bugfix/login-error       # Исправление бага
    hotfix/security-patch    # Срочное исправление в production
    release/1.0.0            # Подготовка релиза

    Примеры

    Типичный workflow с feature-веткой

    # Стартуем от main
    git switch main
    git pull
    
    # Создаём ветку под задачу
    git switch -c feature/auth-form
    
    # Работаем и коммитим
    git add .
    git commit -m "feat: add auth form validation"
    
    # Публикуем ветку и открываем PR
    git push -u origin feature/auth-form

    Merge с последующей очисткой ветки

    # После одобрения PR — локальный merge
    git switch main
    git pull
    git merge feature/auth-form
    
    # Удаляем локальную и удалённую ветку
    git branch -d feature/auth-form
    git push origin --delete feature/auth-form

    Git: ветки и слияние

    Зачем нужны ветки

    Ветки позволяют:

  • Изолировать работу — каждая фича в своей ветке
  • Параллельная разработка — несколько человек не мешают друг другу
  • Безопасные эксперименты — можно удалить ветку если не получилось
  • Code review — Pull Request перед слиянием
  • Основные команды веток

    Создание и переключение

    # Посмотреть все ветки
    git branch
    
    # Создать новую ветку
    git branch feature/auth
    
    # Переключиться на ветку
    git checkout feature/auth
    
    # Создать и переключиться (сокращённо)
    git checkout -b feature/auth
    
    # Новый синтаксис (Git 2.23+)
    git switch feature/auth
    git switch -c feature/new-branch

    Просмотр веток

    # Локальные ветки
    git branch
    
    # Все ветки (включая remote)
    git branch -a
    
    # Ветки с последним коммитом
    git branch -v

    Удаление веток

    # Удалить слитую ветку
    git branch -d feature/auth
    
    # Принудительное удаление (не слита)
    git branch -D feature/auth
    
    # Удалить remote ветку
    git push origin --delete feature/auth

    Git Flow — модель ветвления

    main (production)
      └── develop (development)
            ├── feature/auth
            ├── feature/dashboard
            └── feature/api

    Типичный workflow

    1. Создать ветку от develop: git checkout -b feature/auth develop

    2. Разработка и коммиты

    3. Push в remote: git push -u origin feature/auth

    4. Pull Request → Code Review

    5. Merge в develop

    6. Удалить ветку

    Слияние веток (merge)

    Fast-forward merge

    Когда в main не было новых коммитов:

    git checkout main
    git merge feature/auth
    # Fast-forward — просто передвигает указатель

    Three-way merge

    Когда в обеих ветках есть новые коммиты:

    git checkout main
    git merge feature/auth
    # Создаётся merge commit

    Конфликты слияния

    Когда Git не может автоматически слить изменения:

    git merge feature/auth
    # CONFLICT (content): Merge conflict in index.js

    Разрешение конфликтов

    // В файле появятся маркеры:
    <<<<<<< HEAD
    console.log("версия из main")
    =======
    console.log("версия из feature/auth")
    >>>>>>> feature/auth
    
    // Нужно вручную выбрать или объединить:
    console.log("финальная версия")
    # После разрешения
    git add index.js
    git commit -m "resolve merge conflict"

    Rebase vs Merge

    Merge — сохраняет историю

    main:    A---B---C---M
                  \     /
    feature:       D---E

    Rebase — линейная история

    git checkout feature/auth
    git rebase main
    # Переносит коммиты feature поверх main
    main:    A---B---C
                      \
    feature:           D'---E'

    Золотое правило: Никогда не делайте rebase публичных веток!

    Практики именования веток

    feature/user-auth        # Новая функциональность
    bugfix/login-error       # Исправление бага
    hotfix/security-patch    # Срочное исправление в production
    release/1.0.0            # Подготовка релиза

    Примеры

    Типичный workflow с feature-веткой

    # Стартуем от main
    git switch main
    git pull
    
    # Создаём ветку под задачу
    git switch -c feature/auth-form
    
    # Работаем и коммитим
    git add .
    git commit -m "feat: add auth form validation"
    
    # Публикуем ветку и открываем PR
    git push -u origin feature/auth-form

    Merge с последующей очисткой ветки

    # После одобрения PR — локальный merge
    git switch main
    git pull
    git merge feature/auth-form
    
    # Удаляем локальную и удалённую ветку
    git branch -d feature/auth-form
    git push origin --delete feature/auth-form
    📖

    Теоретический урок

    Изучи материал выше и задай вопросы AI если что-то непонятно

    Этот урок содержит теоретическую информацию. Изучи материал, затем отметь урок как пройденный.

    Загружаем AI-помощника...