git 中的 Squashing 提交是什么意思。如何在 Github 中压缩提交?
我是 Git 的新手,我要求分配给 coala-analyzer 中的一个新错误。我修复了这个错误,现在我被要求压缩我的提交。我该怎么做?
您可以将 Git 视为工作目录快照的高级数据库。
Git 的一个非常好的特性是能够重写提交历史。 这样做的主要原因是很多这样的历史仅与生成它的开发人员相关,因此在将其提交到共享存储库之前必须对其进行简化或做得更好。
从惯用的角度来看,压缩提交 意味着将所述提交中引入的更改移动到其父级中,以便您最终得到一个提交而不是两个(或更多)提交。 如果您多次重复此过程,您可以将 n 次提交减少到一次。
从视觉上看,如果您从标记为 Start 的提交开始工作,您需要这个
您可能会注意到新提交的蓝色阴影稍深。这是故意的。
在 Git 中,压缩是通过一种称为 Interactive Rebase 的 特殊形式的 Rebase 来实现的。 当您将一组提交变基到分支 B 时进行简化,您可以在完成时应用这些提交引入的所有更改,从 B 而不是它们的原始祖先开始。 __
视觉线索
再次注意不同深浅的蓝色。
交互式变基可让您选择应如何变基提交。如果您运行此命令:
git rebase -i branch
您最终会得到一个文件,其中列出了将被重新设置的提交
pick ae3... pick ef6... pick 1e0... pick 341...
我没有命名这些提交,但这四个是从 Start 到 Head的提交
这个列表的好处是 它是可编辑的 。 你可以省略提交,或者你可以 压缩它们 。 您所要做的就是将第一个单词更改为 squash 。
pick ae3... squash ef6... squash 1e0... squash 341...
如果您关闭编辑器并且没有发现合并冲突,您最终会得到以下历史记录:
在您的情况下,您不想变基到另一个分支,而是变基到以前的提交。 为了转换第一个示例中所示的历史记录,您必须运行类似
git rebase -i HEAD~4
将“命令”更改 为 除第一个提交之外的所有提交,然后关闭编辑器。
关于更改历史记录的注意事项
在 Git 中,提交永远不会被编辑。它们可以被修剪、无法访问、克隆但不能更改。 当你变基时,你实际上是在创建新的提交。 任何裁判都无法再访问旧的,因此没有显示在历史记录中,但它们仍然存在!
这是你实际得到的变基:
如果你已经将它们推送到某个地方,重写历史实际上会创建一个分支!