Gernar
Git, сборка и DevOps

Какой уровень git

Разбор вопроса «Какой уровень git» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.

Вопрос

Какой уровень git

Профессия

Frontend Developer

Что хочет услышать интервьюер

Интервьюер хочет оценить, насколько кандидат комфортно работает с Git в повседневной разработке: может ли он выполнять основные операции, работать в команде и решать типичные проблемы (например, конфликты).

Ключевые тезисы

  • Базовые команды: add, commit, push, pull, clone, status (работа с локальным и удалённым репозиторием).
  • Ветвление: создание (branch), переключение (checkout), слияние (merge), разрешение конфликтов.
  • Работа с историей: просмотр логов (log), отмена изменений (reset, revert).
  • Коллаборация: работа с pull/merge requests, fetch vs pull, rebase (базовое понимание).
  • Использование .gitignore для управления игнорируемыми файлами.

Подробный ответ

Git — это распределённая система контроля версий, которая позволяет разработчикам эффективно управлять изменениями в коде. Для Junior Frontend Developer важно понимать базовые команды Git, такие как add, commit, push, pull, clone и status. Эти команды позволяют работать с локальным и удалённым репозиторием, создавать новые коммиты, синхронизировать изменения с сервером и отслеживать состояние проекта. Например, команда git status показывает текущее состояние рабочей директории, что помогает понять, какие файлы изменены или готовы к коммиту. Кроме того, важно уметь работать с ветками: создавать их (git branch), переключаться между ними (git checkout), сливать изменения (git merge) и разрешать конфликты. Конфликты возникают, когда изменения в одной ветке противоречат изменениям в другой, и их разрешение требует ручного вмешательства. Также важно понимать работу с историей коммитов: просматривать логи (git log), отменять изменения (git reset, git revert) и управлять игнорируемыми файлами с помощью .gitignore. Для эффективной коллаборации в команде Junior Developer должен понимать разницу между git fetch и git pull, а также базовые принципы работы с pull/merge requests и rebase. Например, git fetch загружает изменения с удалённого репозитория, но не применяет их, тогда как git pull сразу применяет изменения к текущей ветке.

Практические примеры

Пример 1

Пример 1: Создание и слияние веток. Для создания новой ветки используем команду git branch feature-branch, затем переключаемся на неё с помощью git checkout feature-branch. После внесения изменений и коммита (git add . и git commit -m 'Add new feature'), возвращаемся на основную ветку (git checkout main) и сливаем изменения (git merge feature-branch).

Пример 2

Пример 2: Разрешение конфликтов. Предположим, при слиянии веток возник конфликт. Git покажет файлы с конфликтами. Открываем файл, находим маркеры конфликта (<<<<<<<, =======, >>>>>>>), вручную выбираем нужные изменения, сохраняем файл, добавляем его в индекс (git add &lt;file&gt;) и завершаем слияние (git commit).

Пример 3

Пример 3: Использование .gitignore. Чтобы исключить файлы из отслеживания, создаём файл .gitignore в корне проекта и добавляем туда пути к файлам или директориям, например: node_modules/, *.log. После этого Git игнорирует указанные файлы.

Частые ошибки

  • Ошибка 1: Использование git pull без предварительного git fetch. Это может привести к неожиданным изменениям в локальной ветке, особенно если удалённая ветка была перезаписана.
  • Ошибка 2: Игнорирование конфликтов при слиянии. Некоторые разработчики пытаются автоматически разрешить конфликты, что может привести к потере важных изменений.
  • Ошибка 3: Использование git reset --hard без понимания последствий. Эта команда безвозвратно удаляет все изменения в рабочей директории и индексе.

Связанные темы

  • Git Workflow: Понятие о различных стратегиях работы с Git, таких как Git Flow, GitHub Flow и GitLab Flow.
  • Интеграция Git с CI/CD: Использование Git в процессах непрерывной интеграции и доставки.
  • Git Hooks: Автоматизация задач с помощью хуков Git, например, запуск тестов перед коммитом.

Follow-up вопросы

Как вы разрешаете конфликты при слиянии веток?

Уровень: intermediate

Конфликты разрешаю вручную, анализируя различия в файлах (git diff), редактируя конфликтующие участки и затем добавляя исправленные файлы через git add. После этого завершаю слияние коммитом.

В чём разница между git fetch и git pull?

Уровень: basic

git fetch загружает изменения из удалённого репозитория, но не сливает их с локальными. git pull делает fetch + merge (или rebase, если настроено) автоматически.

Как отменить последний коммит, если он ещё не запушен?

Уровень: intermediate

Можно использовать git reset --soft HEAD1 (сохранит изменения в staged) или git reset --hard HEAD1 (удалит изменения полностью). Для публичных коммитов безопаснее git revert.

Когда стоит использовать rebase вместо merge?

Уровень: advanced

Rebase полезен для поддержания линейной истории (например, перед пул-реквестом), но не рекомендуется для общих веток, так как перезаписывает историю. Merge сохраняет историю слияний.

Как исключить файлы из отслеживания Git?

Уровень: basic

Через .gitignore (для новых файлов) или git rm --cached (для уже отслеживаемых). Файлы в .gitignore не добавляются в репозиторий автоматически.

Содержание