git 变基以掌握两个相互重叠的功能分支



我有这样的情况:

                                   H---I---J feature2
                                  /
                         E---F---G  feature1
                        /
           A---B---C---D  master

我想让我的主人保持最新状态,因为它在处理功能时会非常频繁地更改。我目前的工作方式如下:

git checkout master
git pull
git checkout feature1
git rebase master
git checkout feature2
git rebase feature1

有没有更简单的方法来完成所有这些步骤?我正在使用最新的黑貂 git 版本。此外,我有时甚至会遇到这样的情况,甚至有 6 个功能分支,所以如果任何解决方案都可以在另一个功能分支之上扩展许多功能分支,那就太好了。

实际上,仅重定feature2基也会重定feature1,因为它会复制其提交并将它们重放到master上。

然后,您可以将feature1重置为其新的 HEAD 提交,位于 feature2 HEAD 之前的"n"个提交。
您可以首先使用以下方法计算feature2的提交次数:

git checkout feature2
git rev-list --count HEAD ^feature1 # memorize that in 'n'

然后变基(无需签出母版和拉动(:

git fetch
git rebase origin/master
                                           H'---I'---J' feature2
                                          /
                    master     E'---F'---G' 
                       |      /
           A---B---C---D--Y--Z  origin/master
                        
                         E--F--F (feature1)

最后重置feature1

git branch -f feature1 feature2~n

因此,如果我们将该场景扩展到 6 个分支:

  • 一次变基(即使有 6 个连续分支(
  • 但是 5 个 git rev-list(计算另一个分支 HEAD 所在的距离(
  • 和 5 个 git 分支重置。

无论如何,这都需要编写脚本才能扩展。

从 Git 2.38.0 开始,rebase 已经学会了--update-refs的选项,你的任务变得像:

git rebase --update-refs master feature2

这会将feature2变基到master,同时更新指向原始提交的引用,以指向新的、重定基准的提交。

最新更新