Если вам нужно переписать родительский коммит, используя git replace
, вот как это сделать.
Как отметил Филип Окли, git replace просто заменяет один коммит другим. Чтобы привить родителя к существующему коммиту, вам нужно сначала создать поддельный коммит с правильным родителем.
Скажем, у вас есть две ветки git, которые вы хотите привить:
(a)-(b)-(c) (d)-(e)-(f)
Теперь мы хотим, чтобы (d) был родителем (c). Таким образом, мы создаем замену для (c) с правильным родителем (назовем это c1), затем git replace
(c) с (c1). На этих шагах каждая из букв относится к хешу SHA1, представляющему этот коммит.
Чтобы создать новый коммит:
git checkout d
git rm -rf * # remove all files from working direcotry
git checkout c -- . # commit everything from c over top of it
GIT_AUTHOR_DATE="..." GIT_COMMITTER_DATE="..." git commit -m "..." # create replacement commit with date author
Теперь у вас есть коммит (c1), у которого правильный родитель (d). Поэтому все, что нам нужно сделать, это заменить существующий (c) на (c1):
git replace c c1
Теперь ваша история выглядит так:
(a)-(b)-(c1)-(d)-(e)-(f)
Бинго!