【发布时间】:2012-08-29 12:27:09
【问题描述】:
StackOverflow 上几乎没有关于“扁平化合并”的问题,答案通常是“git rebase”。这些答案虽然错过了一个关键点 - 提交顺序。
假设有一个分支 A 的提交时间为 6 月 1 日和 8 月 1 日,分支 B 的提交时间为 7 月 1 日(UPDATE 以恢复下面描述的用例:分支是完全独立的,没有共同祖先,例如来自 2 个不同的存储库)。将 B 合并到 A 时,将有以下历史记录(每个 git log):
Merged branch 'B'
Aug 1
Jul 1
Jun 1
现在,我正在寻找的是获得相同结果的方法,但没有合并提交(因此具有该顺序的底层线性历史记录,是的,这意味着重新提交提交)。 git rebase 在这里没有帮助,就像它一样,您将获得以下历史记录:
Jul 1
Aug 1
Jun 1
或
Aug 1
Jun 1
Jul 1
换句话说,git rebase 总是将一个分支堆叠在另一个分支之上,而我正在寻找能够散布按作者提交日期排序的提交的解决方案。
显然,对于简单的情况,可以通过使用 git rebase -i 手动对 git rebase 进行后处理来实现所需的安排,但这对于大型历史来说并不实用,所以我正在寻找自动化命令/脚本。
用例?如果 A 和 B 代表同一项目的不同部分,恰好位于不同的 repos 中,并且时间已经到了通过将它们合并在一起来纠正这一点,那么自然希望线性历史按照实际的开发顺序展开。
【问题讨论】:
-
听起来您正试图将线性开发路径固定在非线性版本控制系统上。将所有提交按时间顺序排列似乎是“自然的”,但这将是一个虚假的历史,因为您的团队实际上当时并没有相互合作。至关重要的是最终状态,整合两个团队的努力,而不是在合并步骤不完整之后。
-
@jordan002:问题指定了“团队”在两个分支上“合作”作为起始条件的事实。至于“至关重要”,这个问题正是关于它是什么,而不是关于开发方法的意见。
-
@pfalcon:实际上,在您的问题中并没有这样说。此外,您要在这里解决的实际问题是什么?我们了解您想要做什么;但是您要解决的问题是什么?
-
FWIW,
git rebase处理合并合理的好。 IE。正如人们所期望的那样,提交的顺序被保留了。除非您希望它们按时间顺序排列,因为根据 non-linear 历史记录,rebase必须处理的提交是 not 按该顺序排列的。 -
我目前正面临着类似的情况,并且理解为什么@pfalcon 想要这个。就我而言,这两个团队正在合作,事实上,一个仓库中的提交在逻辑上与另一个仓库中的提交相关并需要提交。所以,时间顺序确实有意义。
标签: git merge rebase git-rewrite-history