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