Это мое текущее дерево git:
A - H (master)
|
\- B - C - D - E (feature)
|
\- F (new)
|
\- G (other)
И я бы хотел перегрузить боковую ветвь так, чтобы она зависела от H
, а не от A
:
A - H (master)
|
\- B'- C'- D'- E'(feature)
|
\- F'(new)
|
\- G'(other)
Легкая концепция, трудно сделать автоматически, похоже. Это уже было задано здесь и here, но предлагаемые решения не работаю для меня.
Во-первых, как указано в первом, вывод git branch
не является тривиальным для синтаксического анализа, когда существует текущая ветвь (имеется предварительный набор *
). Но это не пробник, в моем случае я могу легко указать имена feature
, new
и other
вручную или убедиться, что текущая ветка master
.
Затем я попытался с этими командами:
git rebase --committer-date-is-author-date --preserve-merges --onto master feature^ feature
git rebase --committer-date-is-author-date --preserve-merges --onto master feature^ new
git rebase --committer-date-is-author-date --preserve-merges --onto master feature^ other
и я получаю:
A - H (master)
|
\- E'(feature)
|
\- B' - C' - D' - F'(new)
|
\- B" - C" - D" - G'(other)
Определенно не то, что я хочу! Или, если я использую B^
вместо feature^
, тогда я также получаю историю B - C - D
в ветки feature
.
Итак, любое дальнейшее предложение о том, как сделать это более или менее автоматически?
РЕДАКТОР: Это похоже на работу с этим:
git checkout feature
git merge other
git merge new
git rebase -p master feature
Теперь, по крайней мере, дерево выглядит корректно, мне просто нужно переместить головки ветвей вправо, чтобы они добрались до слияний... что можно сделать с помощью
git checkout master
git branch -f new feature^2
git branch -f feature feature^1
git branch -f other feature^2
git branch -f feature feature^1