【问题标题】:Lost commit history for a branch in octopus merge章鱼合并中分支的丢失提交历史记录
【发布时间】:2013-12-18 08:44:37
【问题描述】:

我刚刚在(意外)章鱼合并后丢失了分支上的本地提交,但不明白为什么。
这是参考日志:

8191469 HEAD@{0}: checkout: moving from develop to feature
832315f HEAD@{1}: checkout: moving from feature to develop
8191469 HEAD@{2}: merge develop: Merge made by the 'recursive' strategy.
e17facc HEAD@{3}: checkout: moving from develop to feature
832315f HEAD@{4}: pull: Fast-forward
fe8ddbb HEAD@{5}: checkout: moving from feature to develop
e17facc HEAD@{6}: commit: B.
4a3d1b7 HEAD@{7}: reset: moving to 4a3d1b79f15981e36fe20079acb7e376ff9a771d
b1635a3 HEAD@{8}: reset: moving to b1635a3a047a0eb0a0e71b7adc9348f6d3837359
9497ed9 HEAD@{9}: merge develop: Merge made by the 'recursive' strategy.
b1635a3 HEAD@{10}: commit (merge): Merge commit '4a3d1b79f15981e36fe20079acb7e376ff9a771d' into feature
ced6980 HEAD@{11}: merge e4403818b8296a2b0aa1e7bd46f59c809b0977b6: Merge made by the 'recursive' strategy.
da7a4bb HEAD@{12}: checkout: moving from develop to feature
fe8ddbb HEAD@{13}: pull origin develop: Fast-forward
2b639b0 HEAD@{14}: checkout: moving from feature to develop
da7a4bb HEAD@{15}: reset: moving to da7a4bb2fa71f327275ab82cd03e437f67ac4561
e806af4 HEAD@{16}: merge develop e4403818b8296a2b0aa1e7bd46f59c809b0977b6: Merge made by the 'octopus' strategy.
da7a4bb HEAD@{17}: commit: Older missing commits go on from here
                   .
                   .
                   .

对此的修复是here
我需要做的就是

git reflog 

在合并之前找到正确的提交

git reset --hard <sha1 of that commit>

章鱼合并为什么要去掉分支的父节点?

【问题讨论】:

    标签: git version-control merge


    【解决方案1】:

    在拉开发之前你推了吗?

    da7a4bb HEAD@{15}:重置:移动到 da7a4bb2fa71f327275ab82cd03e437f67ac4561

    你确实在这里重置了,然后你就这样做了

    e806af4 HEAD@{16}:合并开发 e4403818b8296a2b0aa1e7bd46f59c809b0977b6:“章鱼”策略进行的合并。

    开发合并,将分支顶部密封...

    如果您确实推送,则在合并之前重置为提交可能会有所帮助(在功能上):

       git reset --hard <sha of commit before oct merge>
    

    之后你应该能够用 git pull 得到你丢失的东西

    如果你没有推送,你的数据可能会丢失,但试试这个:

    在 octo 合并之前,使用此命令查找丢失的提交:

       git fsck --lost-found
    

    此时您也可以再次使用 reflog 来查看丢失的提交

    如果 git 知道您丢失的提交,请使用

       git merge <sha of the lost commit git found for you>
    

    恢复您的宝贵数据

    【讨论】:

    • 但是为什么章鱼合并会封住分支的顶部呢?它不应该保留父节点吗?
    • 我的答案基于我从您的日志中做出的诊断...我无法弄清楚您究竟做了什么导致出现在那里的双重重置...最终的想法是章鱼合并当您不想手动解决冲突时解决与多个头合并的算法,进入一个错误(角落?)案例并解决了合并头并只留下一个分支的冲突......您可以通过阅读 Git 文档来找到答案以查看章鱼策略如何在幕后工作......我个人坚持由处理代码的开发人员手动解决冲突。
    • 恢复到 reflog 点解决了它(我把它放在问题上)。
    猜你喜欢
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2014-06-30
    • 2016-03-13
    • 2015-10-19
    相关资源
    最近更新 更多