Каковы основные команды и workflow Git для командной разработки?

«Каковы основные команды и workflow Git для командной разработки?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Git — распределенная система контроля версий. Основной workflow включает работу с локальным репозиторием, удаленным репозиторием (remote) и ветками (branches).

Базовые команды для ежедневной работы:

# Клонирование существующего репозитория
git clone <url-репозитория>

# Получение изменений с удаленного репозитория и слияние с текущей веткой
git pull origin main

# Добавление изменений в индекс (staging area)
git add <файл>  # или git add . для всех

# Фиксация изменений с комментарием
git commit -m "Краткое и информативное описание изменений"

# Отправка закоммиченных изменений в удаленный репозиторий
git push origin <имя-ветки>

# Просмотр состояния файлов и истории коммитов
git status
git log --oneline

Работа с ветками (Feature Branch Workflow):

# Создание новой ветки для задачи/фичи и переход на неё
git checkout -b feature/new-authentication

# После внесения изменений и коммитов - отправка ветки на сервер
git push -u origin feature/new-authentication
# Флаг -u связывает локальную и удаленную ветку для будущих git push/pull

# После код-ревью и аппрува - слияние через Pull/Merge Request (UI GitHub/GitLab).
# Затем обновление локальной main ветки и удаление отработанной ветки
git checkout main
git pull origin main
git branch -d feature/new-authentication # удаление локальной ветки

Разрешение конфликтов слияния: Если git pull или git merge приводит к конфликту, Git помечает файлы. Необходимо вручную отредактировать их, оставив нужные изменения, затем:

git add <разрешенный-файл>
git commit  # Git создаст коммит слияния

Перебазирование (Rebase): Альтернатива слиянию для поддержания линейной истории.

git checkout feature/my-branch
git rebase main  # "перемещает" коммиты вашей ветки на вершину main
# После этого возможен fast-forward merge в main

Важно: Не используйте rebase на коммитах, которые уже были отправлены в общий репозиторий, чтобы не переписывать общую историю.