壁球提交
压缩将多个提交合并为一个,就像 git rebase -i 中的 fixup 或 squash。在 GitTree 中,每个挤压都会首先打开 Squash 对话框:它显示折叠的提交、结果、消息以及谁获得荣誉,在您确认之前不会发生任何变化。您未提交的工作永远不会被触及,并且 Undo 将提交放回原处。
免费使用 GitTree:登录后的所有本地 Git 功能。
开始之前
- 提交位于您已签出的分支上,位于不间断的一行中。选择不能保存合并提交; Squash Branch… 可以。
- 压缩的提交和上面的每个提交都会获得新的 ID。如果您已经推动了它们,则之后需要用力推动;另一个远程分支包含的历史记录不能在这里被压缩。
在哪里可以找到它
- 在图表中选择两个或多个提交(按住 Shift 键单击选择一个范围),右键单击:Squash Commits…。
- 右键单击一项提交:Edit History › Squash into Parent… 或 Fixup into Parent…。
- 右键单击图表或左侧面板中已签出的分支:Squash Branch…。
- 按住
Alt(在 Mac 上为⌥)并将提交拖动到其正上方或下方的提交上。 - 右键单击提交:Edit History › Create Fixup Commit… 以提交作为其修复程序暂存的内容。
- 其中每一项都位于命令面板和功能指南的 Squash 卡上。
| 行动 | macOS | Windows 和 Linux |
|---|---|---|
| 所选内容上的 Squash Commits… | ⌥S | Alt+S |
| 所选提交的 Squash into Parent… | ⌥Q | Alt+Q |
| Squash Branch… 表示已签出的分支 | ⌥⇧B | Alt+Shift+B |
| Undo 南瓜 | ⌘Z | Ctrl+Z |
步骤
打开“壁球”对话框
使用上面的任何条目。该对话框以您挤压的内容命名,例如 Squash 3 Commits、Squash a1b2c3d into Its Parent 或 Squash Branch feature/login。它的摘要行看起来像“3 次提交变成 1 · 12 个文件 · +240 −31 · 保留 Ada 的作者身份”。
检查折叠的提交
Commits that fold 在 Result 下首先列出最旧的代码:由最旧的作者编写的一个提交。对于 Squash Branch…,Base: 显示分支离开其基部的位置; Change… 允许您输入另一个分支、标签或提交,然后重新制定计划。
选择消息
在 Start the message from 下,选择 Combine Messages、Oldest Message、Newest Message、List of Commits 或 Write My Own,然后根据需要编辑文本。需要一个摘要行。
保留其他作者的名誉
当其他人编写一些提交时,Credit the other authors (Co-authored-by) 会为每个提交添加一个
Co-authored-by行。它添加的行列在其下方;取消勾选它即可将它们排除在外。阅读其他变化,然后压缩
What else changes 表示上面有多少提交获得了新 ID(它们的更改保持不变)以及哪些其他分支或标签保留了旧提交。按确认按钮,例如 Squash 3 Commits 或 Squash into Parent。
预期结果
例如,GitTree 表示带有 Undo 按钮的 3 commits squashed into a1b2c3d.,图表显示了一次提交(其中有多个提交)。
您的暂存和未暂存的更改以及未跟踪的文件与原来完全相同:南瓜永远不会接触工作树。
挤压的方法
| 命令 | 什么折叠 |
|---|---|
| Squash Commits… | 您选择的提交,在签出分支上彼此相邻的两个或多个提交。 |
| Squash into Parent… | 一项提交进入其下方的提交。 |
| Fixup into Parent… | 同样的,只保留父级的消息(如 git rebase -i 中的 fixup)。 |
| Squash Branch… | 自离开其基础以来,分支的每次提交都会合并到该基础上的一次提交中。 |
Alt-拖动 | 拖动的提交和您将其放到的邻居。提示 Drop to squash … 显示您可以放下的位置; Esc取消。 |
您已经推送的提交
如果分支的上游有提交,对话框会这样说,并要求您在压缩之前勾选 I will force push … after squashing。之后,该消息会提供 Force Push…,仅当远程分支仍在您上次看到的位置时,它才会替换该分支 (force push)。
稍后提交修复
要修复较旧的提交而不立即重写任何内容,请暂存更改并在该提交上选择 Create Fixup Commit…。选择 Fixup(保留其消息)、Squash(添加注释)或 Amend(用 New message 替换其消息)。 GitTree 提交 fixup!、squash! 或 amend! 提交;带有 Arrange fixup!, squash! and amend! commits 的 interactive rebase 将其折叠起来。
壁球合并保留了他们的作者
当您使用 Squash into staged changes (no commit) 合并分支 时,空的提交框会收到一条消息,列出它带来的提交,其中包含 Co-authored-by 行的作者。您已经写过的消息将被保留。
设置
在首选项 › General 中,Squash: starting message 选择对话框开始的消息,而 Squash: credit co-authors 设置是否开始勾选信用。每个南瓜仍然可以改变两者。
如果出现问题
“提交并不彼此相邻。选择不间断的运行。”
选择已签出分支上相继提交的提交,或对整个分支使用 Squash Branch…。
“合并提交会折叠。Squash Branch……折叠合并;选择不能。”
使用 Squash Branch… 或 交互式变基 逐次选择提交。
“……包含这些提交:它们是共享历史,不能在这里被压缩。”
另一个远程分支有它们。让它们保持原样,或者在从命令行重写共享历史记录之前与您的团队达成一致。
挤压停止并出现错误并显示 Review Again 按钮
当对话框打开时,某些东西改变了分支,所以没有任何东西被压扁。按 Review Again 查看新计划,然后再次挤压。
问题
如何解开南瓜?
按消息或工具栏中的 Undo。 GitTree 在移动分支之前将旧提交保留在 refs/ogt/trash 下,因此它们会完全按原样返回。
压缩的提交上有谁的名字?
折叠的最旧提交的作者及其日期;你是提交者。启用 Credit the other authors (Co-authored-by) 以保留其他人的功劳。
压缩是否会运行我的提交挂钩或触及我的工作文件?
不会。GitTree 直接写入新提交,就像 git rebase 内部所做的那样,并且永远不会更改工作树中的索引或文件。当您的 Git 配置要求签名提交时,它会对它们进行签名。