【问题标题】:Git missed rebase for extended branch development?Git 错过了扩展分支开发的变基?
【发布时间】:2011-07-13 02:29:12
【问题描述】:

几个月前,我在一个正在从事的项目中从主开发分支分支出来。我一直在自己的实验分支上工作,但不断从 master 中提取更改以保持最新。每次我这样做时,我都会使用这个命令集

git checkout master
git pull
git checkout experiment
git merge master

今天我去把我的实验分支合并回master。我只是确保我与主人保持同步,然后打电话给

git checkout master
git merge experiment

当我在 GitX 的 master 分支中查看时,它显示了一条单独的开发线,看起来就像我每次从 master 中拉出以使自己保持最新状态。这是因为我在拉取更改时应该一直在重新调整 master 基础吗?

有没有人有一个不错的解决方案来解决这个问题?我想我可以将实验重新定位到主人身上?但是实验是一个分支,我想把它作为历史上一个明显的独立分支。有没有办法让我返回并重新调整旧的有问题的合并? 你可能会说,我对 git 很陌生。

谢谢!

【问题讨论】:

    标签: git version-control merge rebase


    【解决方案1】:

    没错。

    当您执行合并时,实际上您有一个提交有 2 个父母,发生的事情是这样的:

    原始历史:

    A <- B <- C
    

    你改变了一些东西(X 和 Y)

    A <- B <- C <- X <- Y 
    

    您从跟踪的存储库中提取(假设有人添加了 D 和 E)

    A <- B <- C <- D <- E
               ^
                \- X <- Y
    

    然后你合并了:

    A <- B <- C <- D <- E <- M
               ^             /
                \- X <- Y <-/
    

    这就是为什么你会看到那些“单独的行”

    在变基的情况下,它是这样的:

    您从跟踪的存储库中提取(假设有人添加了 D 和 E)

    A <- B <- C <- D <- E
               ^
                \- X <- Y
    

    你变基(这意味着 GIT 再次应用你的更改 X、Y)

    A <- B <- C <- D <- E <- X' <- Y'
    

    (放弃修订 X 和 Y)

    我相信这是你喜欢看到的

    【讨论】:

    • 好的,我该如何解决这个问题?我可以返回并重新调整旧的错误合并吗?
    • 如果您确定所有合并尚未公开发布,您可以随意发布。我不确定 Git 如何处理“中间合并”案例的变基,但为什么不试一试呢?您可以随时切换回 rebase 之前的位置 :) 更糟糕的情况是,您只需挑选每个非合并版本进行 rebase。无论如何,您必须确保所有更改仍然是本地的。一旦发布,变基将毁掉一切。
    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 2016-09-20
    • 2015-03-28
    • 2018-01-27
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多