当尝试将请求拉回主分支时,如何确保旧分支仍然可以重新设置?

时间:2017-11-09 08:55:26

标签: git github merge version-control rebase

我的工作流程如下:

  1. 从主分支分支以创建版本分支,例如V1.1.1
  2. 从版本分支分支以创建功能分支,例如特征/ 001-添加-X
  3. 当从功能分支的拉取请求返回到版本分支时,尝试执行rebase并合并
  4. 从版本分支到主分支的拉取请求时,尝试执行rebase并合并
  5. 有时,当我尝试进行rebase并合并时,我会遇到冲突。

    一种情况是这样的:

    1. v1.1上有一个拉取请求,要求主分支等待批准。
    2. 因为我们想快速行动,所以我们在主要分支分支v1.2之后 v1.1被重新定位并合并回主人。
    3. 我们从v1.2成功分支了另一个功能分支
    4. 完成功能分支后,我们提取请求然后重新绑定并成功合并回v1.2
    5. 此时,接受v1.1上的pull请求,并将其重新绑定并合并回master。
    6. 现在我们在v1.2上发送一个pull请求以合并到master。
    7. 我们注意到github说合并是可能的,如果我们选择rebase并合并我们会有冲突
    8. 我想到了一种可能的方法来避免这种情况,即在主分支批准旧版本分支上的所有先前拉取请求之后,总是分支新版本分支

      但我想知道是否有办法允许rebase和merge而不等待所有旧版本分支成功合并回主分支

      么?

1 个答案:

答案 0 :(得分:1)

直接在github上为较新版本分支与rebase 合并是不可能的(如果较新的版本分支和旧版本分支都更改了相同的文件)。但是,解决方法是在本地重新定义新版本分支,然后通过PR与rebase合并。我们可以通过下面的图表说明:

假设提交历史原始如下:

           G---H   V1.2
          /
...---A--B--C      master
             \
              D---E---F   V1.1

V1.1分支与rebase合并到master分支后,提交历史记录将为:

           G---H   V1.2
          /
...---A--B--C---E'---F'      master
             \
              D---E---F   V1.1

如果V1.1分支和v1.2分支更改了相同的文件,github pull请求将阻止您将v1.2合并到master分支与rebase,因为存在冲突。

解决方案是在PR合并v1.2master完成后,在v1.1分支的顶部重新定位master分支。您可以使用本地分支中的命令:

git checkout v1.2
git pull origin master --rebase
# resolve the conflicts in local repo
git pull origin v1.2 -f

然后提交历史记录将是:

                       G'---H'   V1.2
                      /
...---A--B--C---E'---F'      master
             \
              D---E---F   V1.1

现在你可以将V1.2分支与rebase合并到master分支,并且github上的PR没有冲突。