分享

How to Squash Commits in Git | Learn Version Contr...

 兰亭文艺 2022-09-20 发布于加拿大

如何在 Git 中压缩提交

在 Git 中“挤压”意味着将多个提交合并为一个。您可以在任何时间点执行此操作(通过使用 Git 的“交互式变基”功能),尽管它通常在合并分支时完成。

请注意,没有独立git squash命令之类的东西。相反,在执行其他 Git 命令(如交互式变基或合并)时,压缩是一种选择。

Git 备忘单

无需记住所有这些命令和参数:免费获取我们流行的“Git 备忘单”!

什么时候压缩你的提交

如前所述,“压缩”您的提交的行为意味着您将多个现有提交合并为一个。如果你应该这样做或避免这样做 - 在某种程度上 - 一个偏好问题:例如,在某些团队中,压缩提交是将功能分支合并回长期运行的分支(如“master”或“主要的'。

但是你为什么要这样做呢?让我们以功能开发的经典案例为例:您可能已经在一个单独的功能分支上工作过,并在此上下文中生成了许多提交。根据你工作的复杂性和持续时间,它甚至可能是相当的提交。在某些时候,您会希望将您的工作合并回主分支。通常是当您决定是否进行壁球时:

  • (a)如果您决定在合并之前进行压缩,那么您的功能分支中的所有这些单独的提交都将合并为一个提交。因此,主提交历史将仅显示此集成的单个提交。
  • (b)如果您决定反对 squashing,您的所有个人提交都将照此保留。

一些团队看到了使用 (a) 和使用 squash 的可能优势:与可能不必要且可能压倒性的许多单独提交不同,主要提交历史记录中只出现一个提交。这有助于保持秩序井然!

但是,您不能说 (a) 或 (b) 是“正确”的做事方式。这两种方法各有利弊,所以这主要是一个偏好和惯例的问题。

如何压制你的提交

压缩提交有不同的方法和工具。在这篇文章中,我们将讨论交互式 RebaseMerge作为压缩提交的两种主要方式。

交互式变基

您可以随时使用 Git 的“交互式变基”功能手动压缩您的提交。深入了解 Interactive Rebase 超出了本文的范围(请查看First Aid Kit for Git以获取有关此主题的一系列免费短视频),但我们将一起浏览一个简单的示例案例。

假设您已经完成了新功能分支的工作(在下面的示例中为“功能/登录”),现在想要将其合并回“主”分支。但在此之前,您需要清理新提交并将其压缩为一个

我们可以通过启动一个交互式 Rebase 会话来做到这一点:

$ git rebase -i HEAD~3

然后将打开一个编辑器窗口,您可以在其中选择要如何操作提交历史的选定部分。请记住,交互式 Rebase 允许对您的提交历史执行许多不同的操作;然而,对于我们这里的示例案例,我们对 'squash' 动作关键字感兴趣。如果您将一行或多行标记为“squash”,它们将与上述行合并:

在为新的组合提交输入提交消息后,Interactive Rebase 完成 - 三个旧提交已被压缩为一个。

小费

在 Tower 中使用交互式变基

如果您使用的是Tower Git 客户端,使用 Interactive Rebase 压缩某些提交非常简单:只需选择要合并的提交,右键单击其中任何一个,然后从上下文菜单。

合并

合并分支时,挤压也是一种选择:

$ git merge --squash feature/login

Auto-merging imprint.html
Removing img/iconBlog.png
Auto-merging about.html
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested

效果与我们之前讨论过的非常相似:所有更改都将像普通合并一样合并 - 但是通过使用该--squash选项,而不是自动创建合并提交,您将在工作中留下本地更改复制,然后您可以自己提交。

最后,这使您可以避免通常由于合并而发生的自动提交。看起来好像您的功能的工作只发生在一次提交中。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多