Установить родителя для первого коммита в репозитории git

Мы отслеживаем выпуски программного продукта, выпущенного производителем, в созданных нами репозиториях git. Мы вносим изменения в этот продукт в клонированных git-репозиториях. Когда новая версия выпущена, мы git merge внесение изменений в наш пользовательский репозиторий и исправление любых конфликтов слияния между их изменениями и нашими изменениями.

Поставщик предоставляет релизы на нашем местном языке и на международном языке. Мы отслеживали только местный язык, но теперь, после 10 объединенных выпусков, мы поняли, что нам нужно отслеживать всемирный язык, чтобы мы могли вносить изменения от других поставщиков, интегрирующихся с этим программным обеспечением.

История коммитов выглядит следующим образом. каждый \ это слияние двух хранилищ.

local A - B - C - D
        \       \
   custom E - F - G

Нам нужно, чтобы это выглядело как

global X - Y - Z
        \
local    A - B - C - D
          \       \
custom     E - F - G

Является ли git reparent ответом на это или что-то еще? Я посмотрел на то, как переопределить в Git и как установить git parent указатель на другого родителя, но я до сих пор не понял, правильно ли это было делать.

1 ответ

Решение

Вы не можете этого сделать. Изменение родительского элемента коммита приведет к созданию совершенно нового объекта коммита с собственным уникальным хешем (идентификатором). Это означает, что все коммиты, которые косвенно имеют это как родитель, также должны быть изменены. И этот коммит будет первым коммитом во всем репозитории, в конечном итоге вы воссоздаете все коммиты в вашем репозитории.

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

Если вы хотите интегрировать исходную историю, вы можете импортировать коммиты XZ в отдельную независимую ветвь, а затем в коммит после D объединить их в вашем местном филиале. Таким образом, вы можете получить что-то вроде этого:

global X - Y - Z -------
                        \
local    A - B - C - D - H
          \       \       \
custom     E - F - G ----- I

Теперь, конечно, это не исправит предыдущие коммиты, но и не сделает их недействительными. И у вас все еще была бы оригинальная история как XZ, и отношение к вашему новому коду в H и позже.

Другие вопросы по тегам