【问题标题】:git rebase to master two feature branches on top of each othergit rebase 掌握两个相互叠加的功能分支
【发布时间】:2023-03-23 10:30:01
【问题描述】:

我有这样的情况:

                                   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

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

【问题讨论】:

  • 你为什么要让这些在彼此之上? Git 基本上是一个用于代码版本控制的工具。在我的团队中,每张票都有一个不同的分支,如果经过测试,它将被合并回主分支。在家里,我使用两个分支,masterdevelop,如果我结束功能/错误修复的开发,我会将其合并回主分支。
  • @Feralheart 因为 featureN 依赖于 featureN-1 的变化。我同时做很多工作,通常它会像 featureN-1 一样结束,而我已经在处理 featureN。

标签: git rebase


【解决方案1】:

实际上,仅重新设置feature2 的基础重新设置feature1 的基础,因为它会复制其提交并将它们重播到master

然后您可以将 feature1 重置为其新的 HEAD 提交,位于 feature2 HEAD 之前的“n”个提交。
你可以先count the number of commits of feature2 使用:

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

然后rebase(不需要checkout master和pull):

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)

终于reset feature1

git branch -f feature1 feature2~n

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

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

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

【讨论】:

  • 看起来编写“手动”解决方案的脚本会容易得多,因为它看起来比重置到新的 HEAD 更直观。我会等待一段时间看看是否有人有其他想法,如果没有,我会接受你的回答:)
  • @CutrNha 我的解决方案可能不太直观,但尽量减少变基的数量,并减少冲突的数量。
猜你喜欢
  • 1970-01-01
  • 2012-03-24
  • 2019-04-28
  • 1970-01-01
  • 2021-09-17
  • 2014-01-03
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多