Установить родителя для первого коммита в репозитории 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 и позже.