如何使用SmartGIT在一次提交中将多个提交从分支合并到主服务器?

时间:2015-10-22 09:40:14

标签: git merge smartgit git-squash

我有一个名为 work_in_progress 的分支,用于调试和测试具有许多小提交的代码。所有这些都有冗余的提交消息。 当我完成后,我想将壁球合并到分支。通常,使用 - squash 参数进行合并时,这是一个单一命令。

但我如何使用 SmartGIT

进行此操作

这里的文档How to perform squash merges似乎是错误的,因为没有选项"分支由选定的提交及其祖先" 组成。

此处的文档How to perform normal merges and squash merges根本不起作用。我试过了,我仍然看到日志中的所有小提交。我之后可以删除 work_in_progress 分支,一切正常,但我希望在分支的历史记录中使用单个提交消息进行单次提交。

修改:这是我的提交对话框中的屏幕截图。我想我错过了"简单提交"选项?!也许我不理解说明^^ enter image description here

编辑2 :以下是日志的屏幕截图。顶部的第二次提交是使用SmartGIT完成的。您可以看到所有中间提交(包括消息)在历史记录中都可见。该分支称为XYZ_work_in_progress。最后(最顶层)提交是使用" git merge --squash ABC_work_in_progress"但是所有的提交都被吞噬了,所以这是一个干净的历史。来自分支的所有工作都会累积到一个提交中,并带有一条消息:-) enter image description here

2 个答案:

答案 0 :(得分:7)

以下是典型的情况:在您的功能分支上开发的东西,同时世界不断转动,更多的东西发生在公共主分支上。

之前:rebase功能分支(推荐)

  1. 功能和主分支,全部拉动和推动。没有待决 的提交。
  2. 您应该已经检查了您的功能分支并且在其提示(头部修订版)上,黄绿色标签告诉您。 (黄色和绿色相邻,可以确保没有推动或拉动等待。)
  3. enter image description here

    4)右键点击提示(第1行)选择Rebase HEAD to...(当然 Rebase到HEAD ...➝麻烦,赢了&# 39;对于几个步骤变得如此明显......)。按对话框中的按钮进行确认。

    5)你在顶部播放了功能提交。作为空心的橙色圆圈,因为事情尚未发生。

    6)右键单击要素分支,说Push to...。选择(o)Tracked or matching branch和-important- [x]Force Pushing(因为您正在更改功能分支的“历史记录”...)

    历史现在看起来很干净,您的提交符合要求,即快速转发:

    enter image description here

    壁球提交

    1. 切换到(签出)主树。右键单击要素分支,例如Merge...。在选项对话框中,您必须选择Merge to Working Tree(否则提交会在您无法选择任何选项的情况下进行,即壁球)。
    2. enter image description here

      1. 您可能需要也可能不需要through resolving and then continue

      2. 最后,说提交。选择(o) Simple commit (one parent, "squash")

      3. enter image description here

        ......她在那里:

        enter image description here

答案 1 :(得分:0)

较新版本的 SmartGit 提供了一个简单的解决方案。您可以选择多个提交,然后从弹出菜单中选择“Squash Commits...”:

Popup menu with the squash option