Git

15 вопросов

1 Merge vs Rebase?

Merge - создает merge commit, сохраняет историю веток. Rebase - переносит коммиты на другую базу, линейная история. Rebase переписывает историю; не делать на общих ветках. Rebase для локальной очистки перед merge.

Открыть отдельно →
2 Как обновить ветку от master?

merge: git checkout feature; git merge master. rebase: git checkout feature; git rebase master (история feature поверх актуального master). После rebase может потребоваться force push (если ветка уже пушилась).

Открыть отдельно →
3 Что такое stash?

Временно сохранить незакоммиченные изменения и очистить рабочую директорию. git stash (или push); git stash pop (или apply) для восстановления. stash list, stash drop. Удобно при смене контекста.

Открыть отдельно →
4 Что такое cherry-pick?

Применить конкретный коммит на текущую ветку. git cherry-pick <commit>. Создает новый коммит с тем же изменением. Используют для переноса отдельных фиксов между ветками.

Открыть отдельно →
5 Что такое bisect?

Бинарный поиск коммита, внесшего баг. git bisect start; git bisect bad; git bisect good <commit>; затем помечать good/bad. Автоматизация: git bisect run script.

Открыть отдельно →
6 Revert vs Reset?

Revert - новый коммит, отменяющий изменения указанного коммита. История не переписывается, безопасно для общих веток. Reset - сдвиг указателя ветки (--soft, --mixed, --hard). Переписывает историю.

Открыть отдельно →
7 Что такое reflog?

Журнал перемещений HEAD и ссылок. git reflog показывает все действия (checkout, reset, merge). Позволяет восстановить "потерянные" коммиты после reset или удаления ветки.

Открыть отдельно →
8 Что такое squash?

Объединение нескольких коммитов в один. git rebase -i: пометить коммиты как squash (или fixup). Используют для очистки истории перед merge (например, все коммиты фичи в один).

Открыть отдельно →
9 Когда допустим force push?

В личных/feature ветках после rebase или исправления истории. Никогда в общую ветку (master/main) - сломает историю у других. force-with-lease безопаснее force - проверяет, что удаленная ветка не изменилась.

Открыть отдельно →
10 Pull vs Fetch?

Fetch - загрузить изменения с remote, не сливать. Pull - fetch + merge (или rebase с pull.rebase). Fetch безопаснее - можно проверить перед merge. Pull может создать merge commit.

Открыть отдельно →
11 Что такое working tree?

Рабочая директория - файлы на диске, с которыми вы работаете. Отличается от индекса (staged) и последнего коммита. git status показывает различия между ними.

Открыть отдельно →
12 Git хранит снимки или дельты?

Снимки: каждый коммит - состояние всех файлов в дереве (с внутренним сжатием и дедупликацией). При checkout восстанавливается полное дерево. Внутри объекты могут храниться дельтами для экономии места.

Открыть отдельно →
13 Что такое Git Flow?

Модель веток: main (production), develop; feature/* от develop; release/* для подготовки релиза; hotfix/* от main. Строгие правила слияния. Альтернативы: GitHub Flow (проще), trunk-based.

Открыть отдельно →
14 Pre-commit хуки?

Скрипты, запускаемые перед коммитом (или перед push). Проверка стиля, линтеры, тесты. Препятствуют коммиту с ошибками. Инструменты: husky, pre-commit framework. Не заменяют CI.

Открыть отдельно →
15 Как уменьшить конфликты при слиянии?

Чаще подтягивать изменения из основной ветки; короткоживущие feature-ветки; маленькие коммиты; договоренности по оформлению (форматирование); избегать изменений одних и тех же строк разными людьми.

Открыть отдельно →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.