我与一些贡献者共享GitHub repository,其提交历史相对较长。在某些时候,我试图将一个孤立的分支合并到主分支中,而这个分支并没有像预期的那样完成。此尝试的结果是,自此合并以来,存储库中的所有文件似乎都已在此提交中(重新)创建。提交历史记录树仍然保留,所以当时我并没有过多关注它(我很高兴终于让这个合并工作了。)
当时我没有意识到的是,个别文件的历史记录未被保留。例如,请参阅this example:此文件的历史记录应该一直追溯到2012年,但是在2017年8月11日合并孤儿分支时,此历史记录未显示。
如果我看一下历史树,我会看到这个流氓像某种阑尾一样晃来晃去,如下图中的绿色所示。通常情况下,不可能安全地rebase
提交已经被推向上游的提交,而不会对其他人造成混乱。但是在这种特殊情况下,是否可以合并或删除此悬挂提交,以便恢复单个文件历史记录?或者是否有其他解决方案可以安全地重新路由版本历史记录?
答案 0 :(得分:2)
您应该只能将父级添加到孤儿院。 (这听起来很神奇)
首先,选择父级,然后将提交替换为git replace --graft
git replace --graft b1fbc1d21933 de3df2f048c
确保一切都很好,git replace不会写任何更改,但它现在应该在你的实例上都很好。 您甚至可以使用
检查新提交git for-each-ref
如果您的历史记录已恢复并且对结果感到满意,请使用
编写更改git filter-branch -- --all
强行推动你的新历史。
免责声明:我已经用您的回购测试了它,它似乎工作正常,但我以前从未真正做过这样的事情,它可能会做不想要的事情。