StackOverflow 上几乎没有关于“扁平化合并”的问题,答案通常是“git rebase”。这些答案虽然错过了一个关键点——提交的顺序。
假设有一个分支 A 的提交时间为 6 月 1 日和 8 月 1 日,分支 B 的提交时间为 7 月 1 日(更新以恢复下面描述的用例:分支是完全独立的并且没有共同的祖先,例如来自 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 中,并且时间已经通过将它们合并在一起来纠正这一点,那么自然希望线性历史按照实际的发展顺序展开。