目前我正在维护两个分支。源分支和它的派生。它们必须同步,因为将来它们将被合并。政策是每两周同步/合并分支。如您所见,“前叉”落后 97 米,领先 217 米。
我尝试在 Team explorer 中首先将一个合并到另一个,反之亦然,但它们都是最新的。拉取请求有很多合并冲突。不是问题,因为我会解决它们。但是当两个分支都是最新的时,我该如何解决合并问题。
目前我正在维护两个分支。源分支和它的派生。它们必须同步,因为将来它们将被合并。政策是每两周同步/合并分支。如您所见,“前叉”落后 97 米,领先 217 米。
我尝试在 Team explorer 中首先将一个合并到另一个,反之亦然,但它们都是最新的。拉取请求有很多合并冲突。不是问题,因为我会解决它们。但是当两个分支都是最新的时,我该如何解决合并问题。
前后差异大的分支维护和组合的正确策略是什么
恐怕没有这样正确的策略来维护和合并前后差异较大的分支。
当我们合并分支时,代码冲突是不可避免的。如果分支中包含的后面和前面之间存在冲突,我们必须手动解决它。
为了减少解决冲突所花费的时间,我们可以尝试增加开发的敏捷性,将合并周期增加到一周或更短。
tl;dr:为了维护Fork/development
,如果可能的话,我更喜欢变基策略,并在不可能变基的周期中回退到合并策略(可能总是这样)。
这是您典型的两周周期的细分。你总是可以从以下开始:
Fork/development
为development
. 这可能最好通过使用 SCM 的 Pull/Merge Request 来完成,但如果不是,从概念上讲它类似于以下命令:git checkout development git pull git merge --no-ff Fork/development # resolve conflicts if needed
Fork/development
,development
以便重新开始。这可以通过这些命令来完成(假设你的遥控器被称为“origin”):git fetch git checkout Fork/development git reset --hard origin/development
development
和Fork/development
都是等效的(同步)。现在Fork/development
使用变基策略或合并策略在接下来的两周内工作。(差异说明如下。)在您的两周周期中,这里有一些个人偏好,但根据评论,作为唯一承诺的人Fork/development
,在我看来,您可以将其视为Fork/development
碰巧持续存在的常规功能分支。在这种情况下,我建议使用变基策略使其保持最新状态,直到下一次在两周内development
重新合并为止。development
如果您能够使用此策略,您的典型一天可能如下所示:
git fetch
git checkout Fork/development
git rebase origin/development # resolve any new conflicts if there are any
# Commit
# Commit
# Commit
# etc.
请注意,这仅在您没有Fork/development
需要保留的任何新合并提交时才有效,但如果您直接提交到分支中,则通常不会进行合并。只需经常进行变基,这样如果发生冲突,您可以及早处理它并且更容易解决它。origin/develop
当我有长时间运行的功能分支时,我通常每天多次重新定位(我们所说的) 。有助于保持分支清洁的另一件事是也定期进行交互式 rebase。在典型的一天中,我可能会创建 20 个提交,并且在一天结束时,我将使用交互式 rebase ( rebase -i
) 来重新排序并将这些提交压缩为 2 或 3 个提交,然后再进行 rebaseorigin/develop
. 两周后,我可能已经提交了数百次,但在我创建拉取请求时,我可能只有不到 10 个“完美”提交。根据您的每个提交是什么,这可能适合您,也可能不适合您。变基策略的最大缺点是,如果您确实经常发生冲突,那么当您变基时,您必须更频繁地解决它们origin/development
,并且可能在单个提交中,因为它会重播您在分支上的所有提交。在第 13 天标记时,如果您有 100 次提交修改相同的文件,您可能必须为单个 rebase 多次解决冲突(尽管首先在那里进行有意义的 squash 可能会减轻痛苦)。有助于启用 rebase 策略的另一件事是,当分支 rebase 期间出现冲突时,解决它们,然后将您的分支合并回development
不久之后。显然,只有在 2 周标记之前允许您同步分支时,您才能执行此操作。
如果你能做到,我会非常喜欢分支和交互式 rebase 策略,但如果由于某种原因你不能,那么你将不得不做一个合并策略。合并策略类似于您的同事提供的策略,即您将定期合并development
到Fork/development
中,然后每两周使用上面的 #1 和 #2 以另一种方式进行。