跳至内容
GitTree
历史和恢复

壁球提交

压缩将多个提交合并为一个,就像 git rebase -i 中的 fixup 或 squash。在 GitTree 中,每个挤压都会首先打开 Squash 对话框:它显示折叠的提交、结果、消息以及谁获得荣誉,在您确认之前不会发生任何变化。您未提交的工作永远不会被触及,并且 Undo 将提交放回原处。

免费已更新

免费使用 GitTree:登录后的所有本地 Git 功能。

在此页面上
  1. 开始之前
  2. 在哪里可以找到它
  3. 步骤
  4. 预期结果
  5. 挤压的方法
  6. 您已经推送的提交
  7. 稍后提交修复
  8. 壁球合并保留了他们的作者
  9. 设置
  10. 如果出现问题
  11. 问题
  12. 有关的

开始之前

  • 提交位于您已签出的分支上,位于不间断的一行中。选择不能保存合并提交; Squash Branch… 可以。
  • 压缩的提交和上面的每个提交都会获得新的 ID。如果您已经推动了它们,则之后需要用力推动;另一个远程分支包含的历史记录不能在这里被压缩。

在哪里可以找到它

  • 在图表中选择两个或多个提交(按住 Shift 键单击选择一个范围),右键单击:Squash Commits…。
  • 右键单击一项提交:Edit History › Squash into Parent… 或 Fixup into Parent…。
  • 右键单击图表或左侧面板中已签出的分支:Squash Branch…。
  • 按住 Alt(在 Mac 上为 ⌥)并将提交拖动到其正上方或下方的提交上。
  • 右键单击提交:Edit History › Create Fixup Commit… 以提交作为其修复程序暂存的内容。
  • 其中每一项都位于命令面板和功能指南的 Squash 卡上。
行动macOSWindows 和 Linux
所选内容上的 Squash Commits…⌥SAlt+S
所选提交的 Squash into Parent…⌥QAlt+Q
Squash Branch… 表示已签出的分支⌥⇧BAlt+Shift+B
Undo 南瓜⌘ZCtrl+Z

步骤

  1. 打开“壁球”对话框

    使用上面的任何条目。该对话框以您挤压的内容命名,例如 Squash 3 Commits、Squash a1b2c3d into Its Parent 或 Squash Branch feature/login。它的摘要行看起来像“3 次提交变成 1 · 12 个文件 · +240 −31 · 保留 Ada 的作者身份”。

  2. 检查折叠的提交

    Commits that fold 在 Result 下首先列出最旧的代码:由最旧的作者编写的一个提交。对于 Squash Branch…,Base: 显示分支离开其基部的位置; Change… 允许您输入另一个分支、标签或提交,然后重新制定计划。

  3. 选择消息

    在 Start the message from 下,选择 Combine Messages、Oldest Message、Newest Message、List of Commits 或 Write My Own,然后根据需要编辑文本。需要一个摘要行。

  4. 保留其他作者的名誉

    当其他人编写一些提交时,Credit the other authors (Co-authored-by) 会为每个提交添加一个 Co-authored-by 行。它添加的行列在其下方;取消勾选它即可将它们排除在外。

  5. 阅读其他变化,然后压缩

    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 配置要求签名提交时,它会对它们进行签名。