У меня есть проект, содержащий две ветки: master и gh-pages. Это по существу два разных проекта, где проект gh-pages зависит от мастер-проекта (а не наоборот). Подумайте об этом как "master содержит исходный код, gh-pages содержит двоичный код, созданный из этих исходных файлов". Периодически я принимаю изменения, которые были накоплены в master, и совершает новую фиксацию ветки gh-страниц с сообщением фиксации "Ввод в строку с master commit xxxxxxxx".
Через некоторое время я понял, что было бы неплохо, если бы gh-страницы зафиксировали "Ввод в соответствие с master commit xxxxxxxx", на самом деле xxxxxxxx был его родителем в репозитории git. Как это (плохое искусство MSPaint):
Есть ли способ сделать репозиторий похожим на второе изображение выше? Я знаю, как делать новые коммиты, следуя этому шаблону: я могу сделать "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