gpt4 book ai didi

git rebase 已经 merge 了分支?

转载 作者:太空狗 更新时间:2023-10-29 13:21:38 28 4
gpt4 key购买 nike

我从 master 分支创建了一个功能分支。之后有来自功能分支的提交 [F1]。

        [F1]            -- Feature Branch
/
[M1]-[M2] -- Master Branch

之后feature分支 merge 到master分支,master分支又多了两个commit[M3]和[M4]。

        [F1]                   -- Feature Branch
/ \
[M1]-[M2]-[F1]-[M3]-[M4] -- Master Branch

现在我又向功能分支添加了两个提交。

        [F1]-[F2]-[F3]         -- Feature Branch
/ \
[M1]-[M2]-[F1]-[M3]-[M4] -- Master Branch

这个时候,我是先把feature分支rebase到master分支,让feature分支有[M3]和[M4]提交的变化,还是直接git merge。

此外,如果我先执行 git rebase,[F1] 提交不会在两个分支中:

                       [F1]-[F2]-[F3]       -- Feature Branch
/
[M1]-[M2]-[F1]-[M3]-[M4] -- Master Branch

最佳答案

所以如果您还没有对 ma​​ster 进行更改并且您不介意重写 ma​​ster ,有一种方法可以做到这一点——但是当你 rebase 时,你就是在重写历史,所以make sure you know what you are doing first .

如果你确定这是你想要的历史方向,你应该首先检查 ma​​ster 分支并以交互方式将它 rebase ( git rebase -i ) 到 所在的提交功能 已从(在您的情况下为 [M2] )中删除。

在你 rebase 之前,你的历史应该是这样的(根据你原来的问题):

        [F1]-[F2]-[F3]         -- Feature Branch
/ \
[M1]-[M2]-[F1]-[M3]-[M4] -- Master Branch

启动交互式 rebase 后,您应该会看到以下操作:

pick hash_f1 [F1]
pick hash_m3 [M3]
pick hash_m4 [M4]

您将希望删除第一个提交,feature 的 merge 内容在提交之前 [F2][F3] ,以便 ma​​ster 可以重放更改 [F1]在里面。请注意,您不会丢失 [F1]提交,因为它仍将存在于功能的历史记录中。

rebase 应该给你这个历史:

        [F1]-[F2]-[F3]         -- Feature Branch
/
[M1]-[M2]-[M3]-[M4] -- Master Branch

ma​​ster 拥有所有 M提交,并且 feature 拥有所有 F提交,仍然从 [M2] 中删除.从那里可以通过简单的 merge 将 feature 返回到 ma​​ster 中:

git merge --no-ff feature

瞧——你已经得到了你想要的:

        [F1]-[F2]-[F3]         -- Feature Branch
/ \
[M1]-[M2]-[M3]-[M4]-[F*] -- Master Branch

再次强调,这就是您想要做的,请务必小心,因为重写历史可能很危险。也就是说,在本地进行绝对值得。

此外,这个过程可以扩展到任何 refs,而不仅仅是一个特性和主分支,所以在其他情况下这可能更有意义。在我看来,像ma​​ster这样稳定的分支一般是不能改写历史的,但是每个Git环境和工作流都不一样,所以真的没有不能改写的规则。

关于git rebase 已经 merge 了分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34873081/

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