合并合并提交

时间:2014-07-23 13:22:44

标签: git merge

假设我有一个看起来如下的存储库:

       /--X---Y----Z---\
A----B----C---D---E-------F-----G---

我的问题是我是否可以“合并”合并提交,以便存储库像这样:

A----B----C---D---E-------F+(X,Y,Z)-----G----H-----I----

或者

A----B----C---D---E-------Q-----G----H-----I----

如果这样会更容易。

编辑:我想将存储库的历史记录线性化,但是我想以编程方式编写它(不知何故),因为repo很大(我们谈论的是提交者)我只是可以' t rebase -i它。

2 个答案:

答案 0 :(得分:1)

这可以使用git rebase --onto并使用显式,目标和源参数来完成:

git branch branch-to-insert Z
git branch branch-following-insert I      # or preferably use the actual branch
                                          # name instead of "I"
git rebase --onto E B branch-to-insert    # rebase commits from (not including)
                                          # B, e.g. X, Y and Z
git rebase --onto branch-to-insert F branch-following-insert      # rebase G..I

这应该给你一个分支

A----B----C----D----E----X----Y----Z----G----H----I----

在命令之后获得树的完整图片:

       /--X---Y----Z---\
A----B----C---D---E-------F-----G----H----I----
                   \---X---Y---Z---G---H---I---
                               ^           ^
                               |           branch-following-insert
                               branch-to-insert

答案 1 :(得分:0)

我认为您正在寻找的是rebase命令。这允许您避免使用合并并创建线性历史记录。基本上,此命令允许您获取在一个分支上提交的所有更改,并在另一个分支上重播它们。阅读更多相关信息here

但是,如果您尚未完成合并,那么正常的rebase工作流程将仅适用于您。从您的问题来看,您似乎已经找到了重写历史的方法。然后我建议调查交互式变基,这正是如此。您可以更改多个提交消息,重新排序提交,压缩提交和拆分提交。阅读更多相关信息here

修改后更新:也许请查看filter-branch选项。我个人从未使用它,但它似乎正是你正在寻找的。来自Git's documentation

“如果您需要以某种可编写脚本的方式重写大量提交,还可以使用另一个历史记录重写选项”