git像拉链一样合并分支

我有一个Git仓库,例如有两个分支\“ master \”和\“ other \”。它们每个几乎包含一个子文件夹的提交,因此在历史记录修订时不会发生冲突。现在,我想删除分支“ other”;并将其提交以类似拉链的方式合并到“ master”中,例如:
Master A1 A2 -  -  -  M3 M4  
Other  B1 -  -  -  B2 -  -   B3
变成
Master A1 B1 A2 B2 M3 M4 B3
而“其他”消失了。因此只剩下一个线性主分支。 Git的工具包有可能吗?     
已邀请:
首先,确定要执行此操作吗?对于Git中的这种情况,有两种相当标准的解决方案,但是它们都不以您想要的方式“压缩”提交。第一种选择只是将\“ other \”合并为\“ master \”,然后删除\“ other \”分支。这不会留下线性历史记录,而是所有内容都在\“ master \”分支中,并且您可以按所需的任何特定顺序查看修订(例如,可以执行
git log --date-order
来获取列在其中的提交您想要的订单)。您最终将获得以下历史记录:     A1 A2 M3 M4     *-*-*-*    / \\ -* *-<主    \\ /     * ---- * --- *     B1 B2 B3 您可以通过运行:
git checkout master
git merge other
git branch -d other
另一个选择是将\“ other \”分支重新设置在master分支之上。这将为您提供线性的历史记录,但是您在\“ other \\”分支上的所有提交都将显示在\“ master \\”上的提交之后。日期将被保留,因此如果您想知道提交何时实际发生,您仍然可以找到答案,但是在拓扑上,它们将在之后进行排序:   A1 A2 M3 M4 B1 B2 B3 -*-*-*-*-*-*-*-<主 您可以通过运行以下命令进行操作:
git checkout other
git rebase master
git checkout master
git merge other
git branch -d other
如果您完全确定以上两种方法都不适合您,则可以考虑尝试采用的“拉链”方法。 Git随附的自动化工具不会为您做到这一点,因此您将为此付出更多努力。这对于任何将历史基于ѭ5的人都将造成问题,因为他们所有人都将不得不基于新的ѭ5re重新建立工作(您提议的线性历史更改了master中每个提交的父母,这意味着这些提交与以前不同,这意味着其他任何人现在都将工作基于全新的提交集,而恰好与之前的提交集具有相同的区别)。 如果您不介意手动进行排序,则可以使用
git rebase -i
随意排序提交。您将运行以下命令(其中
base
是两个分支分开之前的第一个提交;如果
a1
是它们之间不相同的第一个提交,则可以使用
a1~
来引用此提交):
 git checkout master
 git merge other
 git rebase -i base
在交互式基础上,您将看到一个文本文件,其中包含更改列表,您可以将其编辑为要应用更改的顺序。当然,这完全是手动的,因此如果您输入的内容简短,则只能选择历史记录,并希望手动重新排列提交。如果存在任何合并冲突,则可能必须多次手动解决它们。如前所述,这意味着以“ 5”为基础的其他任何人现在也必须重新建立基础。 您还可以通过以下方式在某种程度上实现该过程的自动化:从at8ѭ开始创建一个新分支,然后从一个分支或另一个分支到该新分支中摘樱桃,最后将finally5ѭ替换为该新分支。 但是正如我提到的,您可能不想这样做。我的前两个解决方案没有为您提供所需的历史记录,但确实提供了一些与之接近的解决方案,它们在大多数基于Git的工作流程中均表现最佳。     
也许您可以将Other合并到Master中,然后运行
git rebase -i A1
进行交互基础调整-根据您的喜好重新排列文本编辑器中的提交。您可能仍需要处理合并提交。 而且,如果您已经推送到另一个存储库,则不会重新设置基准,否则您将更改历史记录,并且提交也不会排队。     
创建另一个名为
temp
的分支。
git cherry-pick
的相关提交按into16的顺序提交。将分支
temp
重命名为
master
git branch -M master
。     
如果您不关心实际的提交顺序,那么可以: A1 A2 M3 M4 B1 B2 B3 然后在“其他”分支上执行
git rebase master
。     

要回复问题请先登录注册