结帐到另一个现有分支,其中包含来自 develop 的更改

Checkout to another existing branch with changes from develop

我有一个简单的场景。

所以,我有 3 个分支

我已经在 /feature_1 提交上更改了一些内容并将其合并到 develop

现在我想更改 feature_2 分支中的某些内容,但它不是最新的,开发是提前提交的一些内容。我希望 feature_2 分支是 develop 分支的副本。

我想做这样的事情

git checkout -b new_branch

但是对于现有的分支,我不想创建一个新的分支。

那么我应该怎么办,因为我已经阅读了很多相关内容,我应该结帐到 feature_2 并退出开发吗?

变基?

合并?

请给我最好的解决方案

如果 feature_2 不受 develop 上所做更改的影响,那么我将完成 feature_2 然后合并 develop.

如果 feature_2 需要在 develop 上进行更改,那么如果 feature_2 尚未发布(您是唯一从事此工作的人),那么我会将其重新设置为 develop,因为它创建了更清晰的历史记录。如果你不是唯一一个致力于 feature_2 的人,那么我会将 develop 合并到 feature_2,这样其他工作的人 feature_2 就不会改变他们的历史记录。

feature_2 分支上执行命令 git pull origin develop --rebase 将得到你需要的东西。

假设现在的提交历史如下:

      E-----F-----G     feature_1
     /             \
…---A---…---B---C---D   develop
             \
              H---I     feature_2

feature_2 分支上执行 git pull origin develop --rebase 后,提交历史将是:

      E-----F-----G     feature_1
     /             \
…---A---…---B---C---D   develop
                     \
                      H'---I'    feature_2

如您所见,feature_2 分支将在 develop 分支的最新提交 D 上。


此外,如果您还没有在 feature_2 分支上提交更改(在 feature_2 分支上没有提交 HI),如下图:

      E-----F-----G     feature_1
     /             \
…---A---…---B---C---D   develop
            |
        feature_2

除了方法git pull origin develop --rebase,你可以使用下面的命令重置develop分支顶部的feature_2分支:

git checkout develop
git checkout -B feature_2

注意:git checkout命令的-B选项将在分支名称不存在的情况下创建一个新分支。而如果分支名称存在,它将重置现有分支。