我有一个包含两个分支的项目:master 和 gh-pages。它们本质上是两个不同的项目,其中 gh-pages 项目依赖于主项目(反之亦然)。将其视为“master 包含源代码,gh-pages 包含从这些源文件构建的二进制文件”。定期地,我采用 master 中累积的更改,并使用提交消息“与 master commit xxxxxxxx 保持一致”对 gh-pages 分支进行新的提交。
这样做一段时间后,我意识到如果 gh-pages 提交“与主提交 xxxxxxxx 保持一致”实际上在 git 存储库中将 xxxxxxxx 作为其父级,那就太好了。像这样(糟糕的 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