07/11/2026

GIT

Структурированное руководство по основным командам и концепциям Git, а также практический мини-тест для самопроверки перед собеседованием на позицию QA Automation Engineer.

1. Ключевые концепции (теория)

На собеседовании важно не только знать команды, но и понимать, как Git работает внутри:

  • Working Directory (Рабочая директория): твои текущие файлы на компьютере.
  • Staging Area (Index / Индекс): область подготовленных изменений, которые войдут в следующий коммит.
  • Local Repository (Локальный репозиторий): сохраненная история коммитов на твоей машине.
  • Remote Repository (Удаленный репозиторий): версия проекта на сервере (GitHub, GitLab, Bitbucket).
  • HEAD: указатель на текущий коммит (обычно на последний коммит текущей ветки).

2. Топ команд для собеседования (с пояснениями)

Базовые операции

  • git init – инициализация нового репозитория.
  • git clone <url> – копирование удаленного репозитория на локальную машину.
  • git status – показывает состояние рабочей директории и индекса (какие файлы изменены, не отслеживаются или готовы к коммиту).
  • git add <file> или git add . – добавление изменений в Staging Area.
  • git commit -m "message" – сохранение изменений из индекса в локальный репозиторий.

Синхронизация с удаленным репозиторием

  • git fetch – скачивает изменения из удаленного репозитория, но не объединяет их с твоей текущей веткой.
  • git pull – скачивает изменения и сразу делает merge в текущую ветку (git pull = git fetch + git merge).
  • git push – отправляет твои локальные коммиты в удаленный репозиторий.

Работа с ветками

  • git branch – показать список локальных веток.
  • git branch <name> – создать новую ветку.
  • git checkout <name> или git switch <name> – переключиться на другую ветку.
  • git merge <branch> – объединить указанную ветку в текущую.
  • git rebase <branch> – переписать историю текущей ветки, "подставив" её изменения поверх указанной ветки (делает историю линейной).

Отмена изменений (очень часто спрашивают!)

  • git restore <file> или git checkout -- <file> – отменить изменения в файле до последнего коммита (если файл не в индексе).
  • git reset --soft HEAD~1 – отменяет последний коммит, но оставляет изменения в файлах и в индексе.
  • git reset --hard HEAD~1 – отменяет последний коммит и полностью удаляет изменения в файлах (осторожно!).
  • git revert <commit_hash> – создает новый коммит, который отменяет изменения указанного коммита (безопасно для общих веток, так как не переписывает историю).
  • git stash и git stash pop – временно отложить незакоммиченные изменения, чтобы переключить ветку, и вернуть их позже.

Анализ истории

  • git log – история коммитов (полезны флаги: --oneline, --graph, --all).
  • git diff – показывает различия между файлами, коммитами или ветками.
  • git blame <file> – показывает, кто и в каком коммите изменил каждую строку файла.

3. Топ-5 вопросов на собеседовании и краткие ответы

  1. В чем разница между git merge и git rebase?

    • Merge создает новый "merge commit", сохраняя полную историю ветвлений. Безопасен для общих веток.
    • Rebase переписывает историю, перенося коммиты текущей ветки на вершину целевой. Делает историю чистой и линейной, но опасен для публичных веток, так как меняет хеши коммитов.
  2. В чем разница между git pull и git fetch?

    • git fetch только загружает новые данные из удаленного репозитория, не меняя твои рабочие файлы.
    • git pull делает fetch, а затем сразу пытается слить (merge) эти изменения в твою текущую ветку.
  3. Как отменить последний коммит, если ты уже сделал git push?

    • Безопасный способ: git revert <hash_коммита> и затем git push. Это создаст новый коммит с обратными изменениями, не ломая историю для коллег.
  4. Что такое merge conflict и как его решить?

    • Возникает, когда в двух ветках изменены одни и те же строки в одном файле, и Git не может автоматически решить, какую версию оставить.
    • Решение: открыть конфликтный файл, вручную выбрать нужные изменения (удалить маркеры <<<<<<<, =======, >>>>>>>), сделать git add <file> и git commit.
  5. Зачем нужен git stash?

    • Чтобы временно сохранить "грязные" (незакоммиченные) изменения, быстро переключиться на другую ветку (например, для срочного багфикса), а затем вернуть изменения командой git stash pop или git stash apply.

4. Практический чек-поинт (Hands-on)

Учитывая твой запрос на практический опыт, выдели 15 минут, чтобы выполнить этот сценарий в терминале. Это закрепит знания лучше любой теории:

  1. Создай папку и инициализируй репозиторий: mkdir git-practice && cd git-practice && git init
  2. Создай файл: echo "Hello" > test.txt
  3. Добавь и закоммить: git add test.txt → git commit -m "Initial commit"
  4. Создай новую ветку и переключись: git checkout -b feature-branch
  5. Измени файл: echo "World" >> test.txt и закоммить: git commit -am "Add World"
  6. Вернись в main: git checkout main
  7. Измени ту же строку по-другому: echo "Git" >> test.txt и закоммить: git commit -am "Add Git"
  8. Попробуй слить ветки: git merge feature-branch → получишь конфликт.
  9. Открой test.txt, отредактируй его, оставив нужный вариант, затем: git add test.txt → git commit -m "Resolve conflict".