【问题标题】:How do we handle merge issues with pull requests我们如何处理拉取请求的合并问题
【发布时间】:2019-02-18 15:23:35
【问题描述】:

我正在尝试了解如何最好地处理带有拉取请求的合并情况。

我们基于 master 分支的所有功能。然后我们创建一个发布分支来运行 PR。

我不知道如何解决的情况是我们先 PR 功能 1,然后将功能 2 放入发布分支。

功能 3 与功能 1 存在合并冲突,因此根据我的阅读,我们需要手动将发布合并到功能 3 分支,然后从功能 3 到发布分支执行新的 PR。

如果那时,在测试了发布分支之后,我们发现功能 1 和功能 2 不会被部署,但我们想要发布功能 3。现在这是不可能的,因为这两个功能都被合并到功能3。

到目前为止,我想出的最佳解决方案是创建一个“功能 3 - 合并发布”分支,但我对这个解决方案不太满意。我应该如何处理这样的情况?

(顺便说一句,上次发生这种情况,这是我们在发布中不需要的功能 1-241)

【问题讨论】:

  • 如果特性 1 和特性 2 都合并提交到特性 3,它们都合并到发布分支中,那么简单地还原特性 1 和 2 有什么问题?还原的行为还记录了您不希望在下一个版本中使用这些功能的事实。
  • 首先我不知道你可以恢复一个功能,上次我检查时我不得不恢复功能 1 和功能 2 的提交。这很难做到,因为没有任何东西告诉我哪些提交属于什么功能
  • 您从master 分支,但合并到releasemaster 如何更新?
  • pr在release批准后从release到master,然后我们将master推入生产,为下一个release创建一个新的release
  • @devzero 所以“发布”真的是“分期”还是“质量保证”?由于 masterreleaseproduction 最终将共享相同的历史记录,因此仅使用 master 并使用标签来跟踪 QA 和生产的位置可能更简单。

标签: git


【解决方案1】:

让我们把它画出来。您有三个功能分支。在这里,它们都是从同一个提交中分支出来的,但这并不重要。

      G - H [feature2]
     /
A - B - C [release]
    |\
    | I - J [feature1]
    \
     E - F [feature3]

你可以用git log --graph --decorate --oneline看到这种可视化,除了它会从上到下。

我不知道如何解决的情况是我们先 PR 功能 1,然后将功能 2 放入发布分支。

这让你喜欢这样。

      G - H ---
     /         \
A - B - C - K - L [release]
    |\     / 
    | I - J
    \
     E - F [feature3]

功能 3 与功能 1 存在合并冲突,因此根据我的阅读,我们需要手动将发布合并到功能 3 分支,然后从功能 3 执行新的 PR 到发布分支。

这让你喜欢这样。

      G - H ---
     /         \
A - B - C - K - L [release]
    |\     /     \
    | I - J       \
    \              \
     E - F -------- M [feature3]

如果那时,在测试了发布分支之后,我们发现特性 1 和特性 2 不会被部署,但我们想要发布特性 3。现在这是不可能的,因为这两个特性都是合并到特征 3.

“分支”只是提交的标签。你可以移动它们。这包括将它们移动到合并发生之前。首先,在feature1feature2合并之前重新建立。

git branch feature1 J
git branch feature2 H

           [feature2]
      G - H ---
     /         \
A - B - C - K - L [release]
    |\     /     \
    | I - J [feature1]
    \              \
     E - F -------- M [feature3]

然后在合并之前将feature3 移回。

git checkout feature3
git rest --hard F

           [feature2]
      G - H ---
     /         \
A - B - C - K - L [release]
    |\     / 
    | I - J [feature1]
    \ 
     E - F [feature3]

然后将release 移回feature1feature2 合并之前。

           [feature2]
      G - H
     /
A - B - C [release]
    |\
    | I - J [feature1]
    \ 
     E - F [feature3]

现在您在任何合并发生之前就回来了。您现在可以将feature3 合并到release

【讨论】:

  • 这可能会正常工作......但它似乎不必要的复杂。想象一下,你有 20 个而不是 3 个特征,其中 10 个需要合并,6 个你想要在测试后丢弃的女巫。重新建立原来的分支将是很多工作。
  • @devzero 如果您经常遇到这种情况,则说明您的流程有问题。 20 个正在运行的功能表明您的项目可能过于单一;考虑将其分解为服务和库。再次等待合并的 10 个功能表明过于单一,并且您的审查/合并过程太慢。 合并和测试后需要同时丢弃 6 个功能,这表明您的需求过程有问题。请考虑使用持续集成。如果您发布有关改进您的流程 LMK 的问题,我不能说更多。
  • 我可能有 5-6 个开发人员,每个开发人员实现 3-4 个功能(这是每周冲刺)。我需要整合 20 个分支。使用合并这很容易,创建发布分支,将所有其他 20 个分支合并到发布分支中,如果 20 个分支中的任何一个被拒绝,则删除发布分支并从批准的分支中创建一个新的发布分支。对于拉取请求,这是一场噩梦,因为我必须在重做该过程之前回滚所有合并的分支。我显然遗漏了一些东西,但我无法从你的回答中看出什么
  • @devzero 你不应该因为少数开发人员和功能而遇到这些问题。我怀疑为什么,但我需要更多细节来帮助。特别是为什么您经常拒绝达成一致和合并的功能。如果您发布有关您的开发过程和您遇到的问题的问题,我会很乐意看看。只需在此处放一个链接即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多