首页 > 解决方案 > 如何成功地将分支重新定位到包含分支的提交的(github)压缩提交?

问题描述

我现在很不幸,在工作中使用 github 和 github 流分支策略被卡住了。我不喜欢github。它有我见过的最糟糕的拉取请求实现,它的 CR 工具让我想吐,但这不是(主要)问题。

我们的分支历史目前看起来像这样:

A---B---E' main
     \
      C---D---E feature-1
               \
                F---G feature-2

Feature-2 是 Feature-1 的分支,并且 feature-1 已被合并到 main 中,但我现在看到的可能是在 github 中使用“Squash Merge”这样做的错误,因为它是github(呃)和其他团队都给了我指导。

现在,我们需要将 feature-2 重新定位到主线,因为 Github 否则会在 feature-2 PR 的更改中包含提交 C、D 和 E。

当我这样做时,我结束了:

A---B---E'---C'---D'---E'---F---G feature-2
         \
          main

是的。对于 C、D 和 E 中更改的每个文件,我都会遇到冲突,这只是 E'.


所以无论如何,这是一个奇怪的痛苦,但是 rebase 是一个如此强大的工具,我相信有一种方法可以让它看起来像我想要的那样,那就是:

A---B---E'---F---G feature-2
     \   \
      \    main
       C---D---E feature-1 (closed) (but not really, I'm still committing to it which will probably also come back and bite me...)

我已经尝试git rebase --onto main feature-1 feature-2过 git-rebase 文档,当然只是git rebase main, 以及git rebase --onto main它只是改变了我的分支指向的位置而没有做任何事情(我不太了解--onto)。

同样,如果您在使用“github 流”时有任何保持仓库清洁的提示(因为我认为如果我也进行了合并提交,这可能会发生,但也许不会?),请不要犹豫!多年来我一直在使用 git,但没有使用 github(它可能说明了我在哪里工作),而且我以前的知识并没有翻译。

标签: gitgithub

解决方案


你需要像这样变基:

git rebase --onto main E feature2

E 是分支 feature1 的尖端,因为它在您的 feature2 分支中。


推荐阅读