Перебазирование дерева (коммит / ветка и все ее дочерние элементы) [дубликаты]
На этот вопрос уже есть ответ здесь:
Перебазирование ветки, включая всех ее детей 3 ответаЭто мое текущее дерево мерзавцев:
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)
Кажется, простая концепция, трудно сделать автоматически. Это уже спрашивалиВот а такжеВот, но предложенные решения не работают для меня.
Во-первых, как указано в первом,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