gpt4 book ai didi

git - 从提交历史中删除孤立分支

转载 作者:太空狗 更新时间:2023-10-29 14:03:31 27 4
gpt4 key购买 nike

问题

我有一个 GitHub repository与许多具有相对较长提交历史的贡献者共享。在某些时候,我试图将一个孤立的分支 merge 到 master 分支中,但结果并不像预期的那样。这种尝试的结果是,自从这次 merge 以来,存储库中的所有文件似乎都在这次提交中被(重新)创建了。提交历史树仍然保留着,所以当时我并没有太在意它(我非常高兴我终于让这个 merge 工作了)。

我当时没有意识到的是,单个文件的历史记录并未保留。参见例如 this example : 这个文件的历史应该一直追溯到 2012 年,但是这个历史没有显示在 2017 年 8 月 11 日之后,当时我 merge 了孤儿分支。

可能的解决方案?

如果我查看历史树,我会看到这个流氓提交像某种附录一样悬空,在下图中以绿色表示。通常情况下,不可能安全地 rebase 已经推送到上游的提交,而不会对其他人造成困惑。但是在这种特殊情况下,是否有可能 merge 或删除这个悬空的提交,以便恢复单个文件的历史记录?或者是否有另一种解决方案来安全地重新路由版本历史记录?

Git history tree

最佳答案

您应该能够将父级添加到孤儿。 (这在上下文中听起来很奇怪)

首先,选择父级,然后用 git replace --graft 替换提交

git replace --graft b1fbc1d21933 de3df2f048c

确保一切正常,git replace 不会写入任何更改,但现在在您的实例上应该一切正常。您甚至可以使用

检查新提交
git for-each-ref

如果您恢复了历史并对结果感到满意,请将更改写入

git filter-branch -- --all

并强制 push 你的新历史。

免责声明:我已经用您的存储库对此进行了测试,它似乎工作正常,但我以前从未真正做过这样的事情,它可能会做一些不需要的事情。

关于git - 从提交历史中删除孤立分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49876404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com