【问题标题】:Rebase merge to have never happened变基合并从未发生过
【发布时间】:2015-08-15 19:21:43
【问题描述】:

由于(非常奇怪的)情况,我现在有一个带有 2 个根的 git 存储库。我想删除导致第二个根出现的合并。从技术上讲,这些“根”中的每一个都是父级为 0 的提交。

我想摆脱导致有两个根的合并。

我使用了 git cherry-pick,但没有用,它似乎没有应用任何更改。

明确地说,我希望 a'、b' 和 c' 全部消失(它们是由错误的 rebase 引起的 a、b 和 c 的损坏副本)。

a <- b <- c \ / g <- h \ d -f origin/master a' <- b' <- c' / \ i <- j /

【问题讨论】:

    标签: git rebase cherry-pick


    【解决方案1】:

    如果通信或其他人的工作已经基于其祖先中的 d 是一个问题,请考虑仅使用这两个根,如果您喜欢其余的提交,无论如何它们几乎没有后果。

    您想转储合并的效果,还是只转储祖先?

    如果提交 d 包含您想要保留的更改,或者不包含任何更改,

    echo `git rev-parse $d $d^` >.git/info/grafts
    git filter-branch -- --all
    rm .git/info/grafts
    

    会做的。

    如果提交 d 包含您不想保留的更改,那么您可以将合并变基为

    git rebase -p --onto $d^ $d..origin/master
    

    $ 是 shell 变量语法,用你喜欢的任何引用替换命名的提交。

    任何像这样的历史重写都可能对基于重写的一个提交(即可以追溯到祖先)的其他提交产生连锁反应。因此,之后,您需要强制推送 origin/master 并让其他所有人重新获取并执行任何必要的变基(如果他们自己的工作基于自 c 以来的任何提交)。

    【讨论】:

    • keyboard-to-editbox 警告,尽管我相信这些是正确的。
    • 我试过了,我得到“以前的樱桃选择现在是空的,可能是由于冲突解决。”
    • 你指的是什么樱桃? Afaik filter-branch 和 rebase 都不会弹出该消息。
    • 我不知道我是如何成功地连续 10 次未能正确运行该命令的,这确实有效。樱桃采摘是指之前尝试过的樱桃采摘。
    • 嘿。到过那里。为什么我要向一个叫“Snark”的人承认这一点,我不知道。 :-) p,.s。你做了什么?
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2011-12-29
    • 2017-08-17
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多