如何使用SmartGIT将分支中的多个提交压缩合并到主分支的单个提交中?

3
我有一个名为work_in_progress的分支,用于通过许多小提交调试和测试代码。它们全部都有冗余的提交消息。 当我完成后,我想将其合并压缩到master分支。通常情况下,在使用--squash参数合并时,这是一条单独的命令。
但是我该如何在SmartGIT中执行此操作?
这里如何进行压缩合并的文档似乎有误,因为没有选项“由所选提交及其祖先组成的分支”。
这里如何进行正常合并和压缩合并的文档根本不起作用。我已经尝试过了,但在日志中仍然看到所有的小提交。我之后可以删除work_in_progress,一切都好,但我想要master分支历史记录中的单个提交和单个提交消息。

编辑: 这是我的提交对话框截图。我猜我缺少“简单提交”选项?!也许我不理解说明^^ enter image description here


编辑2:这是日志的截图。从顶部开始的第二个提交是使用SmartGIT完成的。您可以看到所有中间提交(包括消息)都在历史记录中可见。该分支名为XYZ_work_in_progress。最后(最顶部)的提交是使用“git merge --squash ABC_work_in_progress”完成的,但是所有提交都被吞噬了,因此它是一个干净的历史记录。来自该分支的所有工作都累积到一个单独的提交中,并带有单个消息 :-)
enter image description here


在遵循“如何执行普通合并和压缩提交”的过程时,看到运行此过程后您的日志的屏幕截图会很有帮助。 - mstrap
你说的是SmartGIT日志吗?我想我需要再尝试一些虚拟提交,或者是有可能从过去查看日志吗?我查看了SmartGIT发送的命令,没有--squash(就我所记得的)。GIT日志本身只显示两个分支。其中一个分支有3个提交。然后将它们作为另一个提交合并回主分支。这很好,但主分支仍然显示了除“合并”提交外的所有3个提交。 - FrozenTarzan
没有具体的例子很难理解。请设置一个小型测试代码库,以便可以重现错误行为,并为此发布屏幕截图。对我而言,压缩合并的工作符合预期。 - mstrap
“简单提交”选项正是我所需要的,也是我现在拥有的。这就是为什么我要求截图的原因。 - mstrap
是的,我选择了“合并到工作树”。嗯,日志应该看起来一样吧?只是当前的更改没有被提交?因此,“Merge remote-tracking branch 'origin/FOO_work_in_progress' ...”不在日志中。您询问了“简单提交”,那么您的图形界面是否看起来不同?您使用的SmartGIT版本是什么?我在Ubuntu上使用它,也许您有其他操作系统? - FrozenTarzan
显示剩余9条评论
2个回答

7

典型情况如下:您在功能分支上开发,同时世界继续转动,共同的主分支上发生了更多的事情。

之前:变基功能分支(建议)

  1. 功能和主分支都已拉取和推送。没有待处理的提交。
  2. 您应该已经检出了您的功能分支并在其顶部(head-revision)上,黄绿色标签会告诉您。(黄色和绿色相邻可以确保没有未处理的推送或拉取。)

enter image description here

4) 右键单击主分支尖端(line1),选择Rebase HEAD to...(当然不是 Rebase to HEAD... ➝ 麻烦,这将在几个步骤后才变得明显...)。按对话框中的按钮确认。

5) 您得到了功能提交的最新版本。由于还没有提交,因此为空心橙色圆圈。

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

现在历史记录看起来很清晰,您的提交排成一行,即可快进:

enter image description here

压缩提交

  1. 切换到(检出)主树。右键单击功能分支,选择Merge...。在选项对话框中,您必须选择Merge to Working Tree(否则提交将在没有您能够选择任何选项的情况下发生,即压缩)。

enter image description here

  1. 您可能需要解决冲突并继续

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

enter image description here

...就是这样:

enter image description here


嗨,弗兰克,非常感谢你提供的所有屏幕截图和详细描述!不幸的是,与我在问题中上次编辑时相比,生成的日志看起来完全一样。特征的所有提交仍然存在于历史记录中(红色路径),这与仅使用git命令进行压缩提交不同。开发人员仍然可以阅读所有“中间”提交的提交消息,但我不希望他们这样做。我只想要一个单独的提交,一个单独的提交消息。也许答案就是使用git控制台进行压缩合并... - FrozenTarzan
它们是“可见的”,但它们不在“主路径”上。因此,除非在日志视图➝分支视图➝origin➝...中启用您的特性分支,否则大多数同事将看不到它们。(如果您关心简单性。) - Frank N
如果你关心隐私,最好一开始不要创建一个远程(跟踪)功能分支……请注意,在主SmartGit视图的传出面板中,您也可以压缩-推送几个已提交但未推送的更改。(做几个并在它们上面右键单击) - Frank N
1
我理解你的观点,但是对于我的问题,答案似乎是“SmartGit无法实现这一点”。这对我来说没问题,我只是想确认一下。关于“隐私”,更多的是我们的Web界面到Git服务器上列出了所有的内容,所以基本上没有办法区分“中间提交”和合并提交。这只是关于变更可视化的问题。感谢您的时间和回答! - FrozenTarzan

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

Popup menu with the squash option


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接