Слияние слияния

Вопрос:

Скажем, у меня есть репозиторий, который выглядит следующим образом:

       /--X---Y----Z---\
A----B----C---D---E-------F-----G---

Мой вопрос в том, могу ли я “объединить” коммиты слияния, чтобы репозиторий хотел:

A----B----C---D---E-------F+(X,Y,Z)-----G----H-----I----

или, может быть

A----B----C---D---E-------Q-----G----H-----I----

если это облегчит ситуацию.

EDIT: я хотел бы сделать историю репозитория линейной, но я хотел бы сделать это (как-то) программно, поскольку репо огромно (мы говорим о hunders of commits), и я просто не могу rebase -i это.

Ответ №1

Это можно сделать с помощью git rebase --onto и использования явных, целевых и исходных аргументов:

git branch branch-to-insert Z
git branch branch-following-insert I      # or preferably use the actual branch
# name instead of "I"
git rebase --onto E B branch-to-insert    # rebase commits from (not including)
# B, e.g. X, Y and Z
git rebase --onto branch-to-insert F branch-following-insert      # rebase G..I

Это должно дать вам ветку с

A----B----C----D----E----X----Y----Z----G----H----I----

Для полной картины вашего дерева после команд:

       /--X---Y----Z---\
A----B----C---D---E-------F-----G----H----I----
\---X---Y---Z---G---H---I---
^           ^
|           branch-following-insert
branch-to-insert

Ответ №2

Я думаю, что вы ищете команду rebase. Это позволяет избежать использования слияния и создания линейной истории. В принципе, эта команда позволяет вам принимать все изменения, которые были зафиксированы на одной ветке, и воспроизводить их на другом. Подробнее об этом читайте здесь.

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

Обновление после редактирования: возможно, загляните в опцию filter-branch. Я лично никогда не использовал его, но, похоже, именно то, что вы ищете. Из документации Git:

“Существует еще одна опция перезаписи истории, которую вы можете использовать, если вам нужно переписать большее количество коммитов на некоторые сценарии”,

Оцените статью
TechArks.Ru
Добавить комментарий