Как добавить дополнительных родителей к старым коммитам git?

У меня есть проект, содержащий две ветки: master и gh-pages. По сути, это два разных проекта, где проект gh-pages зависит от главного проекта (а не наоборот). Думайте об этом так: «master содержит исходный код, gh-pages содержит двоичный файл, созданный из этих исходных файлов». Периодически я беру изменения, которые накопились в мастере, и делаю новый коммит в ветку gh-pages с сообщением о коммите «Привести в соответствие с мастер-коммитом хххххххх».

how the network graph currently looks

Через некоторое время я понял, что было бы неплохо, если бы коммит gh-pages «Привести в соответствие с основным коммитом xxxxxxxx» действительно имел xxxxxxxx в качестве родителя в репозитории git. Вот так (плохая графика MSPaint):

how it would ideally look

Есть ли способ сделать репозиторий похожим на второе изображение выше? Я знаю, как сделать новые коммиты по следующему шаблону: я могу выполнить "git merge -s ours master" (который устанавливает родительские элементы пустой фиксации), а затем "git commit --amend adv550.z8" (где adv550.z8 бинарный файл, который на самом деле изменяется). Но позволяет ли git вернуться в прошлое и добавить новых родителей к старым коммитам?

Я совершенно готов «git push -f» и стереть текущую историю моего репозитория Github, как только я приведу свое локальное репо в правильный вид.Вопрос в том, могу лия правильно выглядеть в своем локальном репозитории?


ОТРЕДАКТИРОВАНО Спустя годы, чтобы добавить:В конце концов я отказался от своих попыток сделать так, чтобы история git gh-pagesвыглядела так; Я решил, что это слишком много работы для нулевой выгоды. Моя новая практика заключается в том, чтобы агрессивно сжимать коммиты в gh-pages, потому что сохранение этих сообщений коммитов в моем случае действительно не имеет значения. (Это просто длинная строка «Привести в соответствие с основной фиксацией...», ни одна из которых не представляет интереса с исторической точки зрения.) Однако, если бы мне нужно было сделать это снова, я бы прислушался к ответам, в которых говорилось

git merge $intended_parent_1 $intended_parent_2
git checkout $original_commit -- .
git commit --amend -a -C $original_commit
13
задан krlmlr 1 August 2016 в 19:56
поделиться