- Что такое GitFlow?
Ответ
GitFlow - модель ветвления Git.
Ключевые идеи:
- Данная модель отлично подходит для организации рабочего процесса на основе релизов,
- Gitflow предлагает создание отдельной ветки для исправлений ошибок в продуктовой среде.
Последовательность работы при использовании модели Gitflow:
- Из master создается ветка develop.
- Из develop создаются ветки feature.
- Когда разработка новой функциональности завершена, она объединяется с веткой develop.
- Из develop создается ветка release.
- Когда ветка релиза готова, она объединяется с develop и master.
- Если в master обнаружена проблема, из нее создается ветка hotfix.
- Как только исправление на ветке hotfix завершено, она объединяется с develop и master.
- Чем
merge
отличается отrebase
?
Ответ
-
git merge
- выполняет слияние коммитов из одной ветки в другую. В этом процессе изменяется только целевая ветка. История исходных веток остается неизменной.Преимущества:
- Простота,
- Сохраняет полную историю и хронологический порядок,
- Поддерживает контекст ветки.
Недостатки:
- История коммитов может быть заполнена (загрязнена) множеством коммитов,
- Отладка с использованием git bisect может стать сложнее.
-
git rebase
- сжимает все изменения в один патч. Затем интегрирует патч в целевую ветку. В отличии от merge, rebase перезаписывает историю, потому что она передаётся завершенную работу из одной ветки в другую. В процессе устраняется нежелательная история.Преимущества:
- Упрощает потенциально сложную историю,
- Упрощение манипуляций с единственным коммитом,
- Избежание слияния коммитов в занятых репозиториях и ветках,
- Очищает промежуточные коммиты, делая их одним коммитом, что полезно для DevOps команд.
Недостатки:
- Сжатие фич до нескольких коммитов может скрыть контекст
- Перемещение публичных репозиториев может быть опасным при работе в команде,
- Появляется больше работы,
- Для восстановления с удаленными ветками требуется принудительный пуш. Это приводит к обновлению всех веток, имеющих одно и то же имя, как локально, так и удаленно.
- Чем
tag
отличается отbranch
?
Ответ
И tag и branch представляют собой указатели на коммиты.
- Ветка представляет собой отдельный поток разработки, который может выполняться одновременно с другими разработками в той же кодовой базе. Коммит в ветке указывает на изменения, которые добавляются в новых коммитах
- Тег представляет собой версию определенной ветки в определенный момент времени.
Tag представляет собой версию той или иной ветки в определенный момент времени. Branch представляет собой отдельный поток разработки, который может выполнятся одновременно с другими разработками в той же кодовой базе.
- В ветке develop есть коммит с изменениями, которые нужно перенести в ветку master. Как это сделать?
Ответ
Необходимо найти хеш этого коммита и выполнить следующую комманду в ветке, в которую нужно перенести коммит.
git cherry-pick <commit_hash>
- Для чего нужна команда
git commit --amend
?
Ответ
commit --ammend
используется для исправления сообщения последнего коммита. Также возможно использовать, чтобы добавить файлы в индекс (git add
), после добавить файлы в коммит git commit --ammend
.
- Что такое Trunk-based development?
Ответ
Trunk-based Development (TBD) - модель ветвления, в которой разработчики совместно работают над кодом в одной ветви, называемой "стволом" (trunk). При этом другие ветви имеют короткий срок жизни благодаря использованию документированных методов.
- Состояние репозитория ушло на много коммитов вперед. Как откатить весь репозиторий к определенному коммиту?
Ответ
git reset --hard <tag/branch/commit hash>
- В репозиторий запушен коммит с изменениями в двух файлах. Как откатить изменения этого коммита?
Ответ
git revert