На самом деле существует третья возможность - и, скорее всего, множество других, поскольку GIT - это скорее реализация структуры SCM, чем реализация методологии SCM. Эта третья возможность основана на rebase
.
rebase
Субкоманда GIT принимает серию фиксации ( как правило , от вашей точки ветвления на кончик темы ветви topic
) и воспроизводить их в другом месте ( как правило , на кончике интеграции отрасли, например master
). rebase
Субкоманда производит новые коммиты, что дает возможность перегруппировки фиксаций в форме , которая легче обзор. Это дает новую серию коммитов, аналогичную той, что была topic
раньше, но появлялась с корнем в верхней части ветви интеграции. Эта новая ветвь все еще вызывается topic
GIT, так что старая ссылка отбрасывается. Я неофициально помечаю topic-0
исходное состояние вашей ветки topic-1
и так далее по разному рефакторингу.
Вот мое предложение для вашей topic
ветки:
(Необязательный шаг) Вы в интерактивном режиме перебазировать вашу тему ветвь topic
на ее точку ветвления (см --fixup
опции commit
и -i
и --autosquash
опцию на rebase
), что дает возможность переписать свои коммиты таким образом , что легче обзор. Это приводит к ответвлению topic-1
.
Вы перебазируете ветку своей темы в верхней части ветки интеграции, это похоже на слияние, но «не загрязняет» историю слиянием, которое является просто артефактом разработки программного обеспечения. Это приводит к ответвлению topic-2
.
Пошлите topic-2
товарищу по команде, который рассматривает это против наконечника master
.
Если topic-2
все в порядке, тогда объедините его с мастером.
П р и м е ч а н и е - Ветви - где ветвь ссылается на дерево коммитов - все будут называться GIT одинаково, поэтому в конце процесса только ветвь topic-2
имеет имя в GIT.
Плюсы:
- Нет устаревшего кода в обзоре.
- Никаких ложных обзоров «иностранных слияний» (явление, которое вы описали в 1-м).
- Возможность переписывать коммиты чистым способом.
Минусы:
- Вместо одной отрасли
topic-0
, есть три ветви артефакты topic-0
, topic-1
и topic-2
которые созданы в фиксации дерева. (Хотя в любое время только один из них имеет имя в GIT.)
В вашем 1-м сценарии «если кто-то слил что-то между« 1 ». и «2.» »означает промежуток времени между созданием точки ветвления и временем, когда вы решили объединиться. В этом сценарии «если кто-то слил что-то между« 1 ». и «2.» относится к промежутку времени между перебазированием и слиянием, которое обычно очень мало. Таким образом, в сценарии, который я предоставляю, вы можете «заблокировать» master
ветку на время слияния, не нарушая существенно ваш рабочий процесс, в то время как в первом сценарии это нецелесообразно.
Если вы делаете систематические обзоры кода, вероятно, хорошей идеей будет перестановка коммитов адекватным образом (необязательный шаг).
Управление артефактами промежуточной ветви представляет сложность, только если вы делитесь ими между репозиториями.