2015-08-27 5 views
2

Я ищу способ внесения изменений в ветви функций после их объединения с мастером. Цель состоит в том, чтобы сохранить ветвь функции только в том случае, если она связана с ней.Изменения в ветви функции после слияния с мастером

Часто бывает, что функция требует дополнительной полировки после того, как она уже была нажата для управления. Изменения, которые были сделаны для освоения в течение этого времени, не противоречат этой функции, а это означает, что при реализации дополнительной работы в ветви признака возможна перестановка фактического мастера.

На рисунке ниже показана ситуация:

enter image description here

подход я использовал до сих пор: перебазироваться освоить и объединить функции обратно освоить

enter image description here

Против -> The ветвь функции теперь продиктована частями от мастера.

enter image description here

Вопрос: Какие подходы вы берете на практике, чтобы решить эту проблему?

Пример кода

Для описания ниже подходов является код, чтобы создать структуру репо из примеров.

# mkdir test 
git init 
touch master-change-file 
git add master-change-file 
git commit -m "initial commit" 
echo 1 > master-change-file 
git commit -a -m "master commit 1" 
echo 2 > master-change-file 
git commit -a -m "master commit 2" 
git checkout -b feature 
echo 3 > feature-change-file 
git add feature-change-file 
git commit -a -m "feature commit 1" 
echo 4 > feature-change-file 
git commit -a -m "feature commit 2" 
echo 5 > feature-change-file 
git commit -a -m "feature commit 3" 
git checkout master 
git merge --no-ff feature -m "Merge branch 'feature'" 
git checkout feature 
echo 6 > feature-change-file 
git commit -a -m "feature commit 4" 
echo 7 > feature-change-file 
git commit -a -m "feature commit 5" 
git checkout master 
echo 8 > master-change-file 
git commit -a -m "master commit 3" 
echo 9 > master-change-file 
git commit -a -m "master commit 3" 
# gitk --all 

ответ

1

подход я использовал до сих пор: Rebase освоить и объединить функции обратно освоить

Я думаю, что вы могли бы быть немного запутались с целью перебазирования. Если вы внесли новые коммиты в ветвь функции после , сменив на master, и вы хотите внести эти новые изменения в master, а затем переустановка - это один из вариантов. Рассмотрим следующую диаграмму:

master: A <- B <- C <- D 
feature: A <- B <- C <- E <- F 

Если вы должны были сделать:

git checkout feature 
git rebase master 

тогда вы остались бы:

master: A <- B <- C <- D 
feature: A <- B <- C <- D <- E' <- F' 

На данный момент, вы просто нажимной на feature ветвь в master, вы бы не объединить его. Объединение feature в master после выполнения перебазы бессмысленно и побеждает цель перезагрузки, которая заключается в поддержании линейности.

Наконец, вот ответ на ваш вопрос. У вас в основном есть два варианта обработки этих ветвей функций, которые имеют новые изменения. Вы можете либо объединиться, либо можете переустановить. Вам решать, хотите ли вы сохранить первоначальные коммиты, которые имели место в ветвях функций.

+0

Не уверен, что вы подразумеваете под 'push'. Из контекста я бы догадался, что это «быстрое слияние»? – TheMeaningfulEngineer

+0

После выполнения rebase вы будете «git push» этой функции в «master». Это не нормальное слияние, потому что слияние оставляет вас с одной фиксацией, и быстрая пересылка 'master' может оставить вас с _many_ коммитами из ветви функции. –

+0

В любом случае, только два варианта, которые я действительно вижу, - это переустановка функции на 'master' и fast-forward' master', _or_, чтобы просто слить новые коммиты с функции в 'master'. –