小编典典

在 git 中压缩提交是什么意思?

all

git 中的 Squashing 提交是什么意思。如何在 Github 中压缩提交?

我是 Git 的新手,我要求分配给 coala-analyzer 中的一个新错误。我修复了这个错误,现在我被要求压缩我的提交。我该怎么做?


阅读 92

收藏
2022-06-30

共1个答案

小编典典

您可以将 Git 视为工作目录快照的高级数据库。

Git 的一个非常好的特性是能够重写提交历史。
这样做的主要原因是很多这样的历史仅与生成它的开发人员相关,因此在将其提交到共享存储库之前必须对其进行简化或做得更好。

从惯用的角度来看,压缩提交 意味着将所述提交中引入的更改移动到其父级中,以便您最终得到一个提交而不是两个(或更多)提交。
如果您多次重复此过程,您可以将 n 次提交减少到一次。

从视觉上看,如果您从标记为 Start 的提交开始工作,您需要这个

Git 提交压缩

您可能会注意到新提交的蓝色阴影稍深。这是故意的。

在 Git 中,压缩是通过一种称为 Interactive Rebase 特殊形式的 Rebase 来实现的。 当您将一组提交变基到分支 B
时进行简化,您可以在完成时应用这些提交引入的所有更改,从 B 而不是它们的原始祖先开始。 __


视觉线索

在此处输入图像描述

再次注意不同深浅的蓝色。

交互式变基可让您选择应如何变基提交。如果您运行此命令:

 git rebase -i branch

您最终会得到一个文件,其中列出了将被重新设置的提交

 pick ae3...
 pick ef6...
 pick 1e0...
 pick 341...

我没有命名这些提交,但这四个是从 StartHead的提交

这个列表的好处是 它是可编辑的
你可以省略提交,或者你可以 压缩它们
您所要做的就是将第一个单词更改为 squash

 pick ae3...
 squash ef6...
 squash 1e0...
 squash 341...

如果您关闭编辑器并且没有发现合并冲突,您最终会得到以下历史记录:

在此处输入图像描述

在您的情况下,您不想变基到另一个分支,而是变基到以前的提交。
为了转换第一个示例中所示的历史记录,您必须运行类似

git rebase -i HEAD~4

将“命令”更改 除第一个提交之外的所有提交,然后关闭编辑器。


关于更改历史记录的注意事项

在 Git 中,提交永远不会被编辑。它们可以被修剪、无法访问、克隆但不能更改。
当你变基时,你实际上是在创建新的提交。
任何裁判都无法再访问旧的,因此没有显示在历史记录中,但它们仍然存在!

这是你实际得到的变基:

在此处输入图像描述

如果你已经将它们推送到某个地方,重写历史实际上会创建一个分支!

2022-06-30