сделаю тебя счастливым.
отаю над проектом, который имеет две ветви:master
а такжеfeature
feature
Ветка была создана некоторое время назад и имеет множество коммитов.
Посколькуfeature
ветвь была создана там было несколько коммитовmaster
В этот момент, когда я иду вrebase
отmaster
Я получаю конфликты. Я разрешаю их, а затемrebase --continue
, Тогда я снова получаю конфликты, и снова решаю иrebase --continue
, Это происходит снова и снова, и часто кажется, что это одни и те же конфликты.
На мой взгляд, вот что происходит:
master(commits)->a->b
feature(commits)->c->d->e->f->g
feature
был разветвлен отmaster->a
и тогда все коммиты были созданы.
Когда яrebase
это перематывает назад к началуfeature
откуда он был разветвленmaster
относитсяmaster->b
а затем начинает применятьсяfeature->c
на данный момент у него есть конфликт. Я разрешаю (принимаяmaster
изменения) и продолжить. Теперь он пытается применитьfeature->d
и находит тот же конфликт. Я снова должен решить иcontinue
, Это происходит снова и снова.
Например, вот изменения:
master->a
<div id="foo">
master->b
<div id="bar">
feature->c
<div id="fubar">
feature->d
//Nothing has changed, inherited from feature->c
<div id="fubar">
Я предполагаю, что когда он достигнетfeature->c
это говорит об измененииfoo
вfubar
а потом замечает, чтоfoo
уже изменен наbar
, Я решаюbar
а затем он делает ту же логику, применяяfeature->d
Мои два вопроса:
1) Правильно ли я понимаю, как git работает / имеет дело с коммитами / конфликтами / перебазированием?
2) Как мне избежать повторения одних и тех же конфликтов снова и снова? Я думал о том, чтобы раздавить все коммиты в ветви функций, чтобы иметь дело только с одним. Я не был уверен, было ли это хорошей идеей или наилучшим способом добиться успеха в сценарии.
Обратите внимание, это очень упрощенный пример. В действительности у меня гораздо больше коммитов и внутри каждого файла с многочисленными конфликтами. Некоторые из них кажутся одинаковыми на протяженииrebase --continue
процесс и некоторые новые для каждогоcommit
.
Моя конечная цель - очистить этот проект настолько просто, насколько это возможно (перебрать ветку функций с текущего мастера). Мне плевать на историю коммитов.