【问题标题】:Partially merge two Git branches部分合并两个 Git 分支
【发布时间】:2021-01-18 03:59:02
【问题描述】:

我看到 git repos 教程的分支对应于教程的每一章。 因此,例如在第一章中,教程是教如何创建主页,在第二章中如何将其连接到后端。

第 1 章在 git repo 中有一个第 1 章分支,只有主页

第 2 章有第 2 章分支,其中包含主页 + 调用 API 的脚本,依此类推。

现在假设在某一时刻(第 3 章)我们想要更改主页的颜色和样式,并且我们希望将其反映在第 1 章、第 2 章和第 3 章的所有分支中。

合并第 3 章中对样式所做的更改也会将所有更改合并回第 1 章,而不是,因此第 1 章和第 3 章的分支将是相同的。这是我们不想要的。

除了手动复制和粘贴所需的更改之外,还有其他方法吗?

【问题讨论】:

  • 在所有分支上合并时对第 1 章分支进行修改。其他方式让第 1 章有一个子模块而不是一个分支
  • 您是在问如何仅将更改合并到另一个分支中的某些文件?
  • 考虑挑选从第 3 章分支到第 2 章和第 1 章分支的变化,如果它们足够相似的话。
  • @Ôrel 谢谢,这是接受的答案中描述的第一种方式
  • @DMalan 可能在文件中从一个分支到另一个分支进行了更改

标签: git svc


【解决方案1】:

有很多方法可以实现您所描述的。将chapter3 合并到前面的章节中并不是其中之一。 (你可以近似地理解“只生成一些文件”的想法,但它非常手动并且可能导致错误。还值得注意的是,在大多数教程中,后面的章节可能会修改前一章中介绍的文件,所以逐个文件合并不一定会起作用。)

所以你拥有的是这样的:

O -- x -- x <--(chapter1)
           \
            x -- x <--(chapter2)
                  \
                   x -- x -- x <--(chapter3)

最简单的方法是更改​​chapter1 分支上的颜色,然后将它们向前合并。

这会给你一个类似的历史

O -- x -- x --------------- A <--(chapter1)
           \                 \
            x -- x ---------- M1 <--(chapter2)
                  \             \
                   x -- x -- x - M2 <--(chapter3)

这将是最简单的方法;这是使用分支和合并来做你想做的事情的自然方式。其他一切都将是试图通过看起来与这张图片不同的历史来获得相同的效果,可能会以一些手动步骤为代价。

如果您只是不想合并提交,则可以在将更改从 chapter1 合并到其他分支时使用 --squash 选项。这会给你类似的东西

O -- x -- x -- A <--(chapter1)
           \
            x -- x -- A' <--(chapter2)
                  \
                   x -- x -- x - A'' <--(chapter3)

您可以通过挑选或重新设置添加的提交来获得类似的效果。不利的一面是,git 不“知道”chapter2chapter3 包含来自 A 的更改。因此,如果您返回并再次向 chapter1 添加更改,并希望将这些更改也向前传播,您可能会遇到不必要的合并冲突。

第三种方法是重写历史记录,使其“看起来”在创建其他章节分支之前就已经存在更改。虽然出于美观的原因,我通常不是重写历史记录的忠实拥护者,但如果回购的历史记录应该通过教程跟踪进度,这是一个相当合理的选择。在这种情况下,历史可以说是您正在制作的内容的一部分,因此它当然可能会被修改。

如何最好地进行这种重写取决于 repo 的复杂程度。

作为一系列变基可能很简单(如果一切都非常线性)。 (也就是说,你可以查看O,进行更改,使用--amend 提交,然后将chapter1 重新设置为修改后的提交,然后重新设置chapter2,等等。

如果步骤太多,或者如果 repo 更复杂,那么可以使用 filter-repo 之类的东西一次重写整个历史记录。

【讨论】:

  • 感谢@MarkAdelsberger 提供详细而翔实的答案
猜你喜欢
  • 2014-09-23
  • 2013-05-23
  • 2019-04-15
  • 2013-04-11
  • 2011-09-20
  • 2013-11-09
  • 2012-03-05
  • 2012-01-23
  • 2016-01-11
相关资源
最近更新 更多