首页 > 解决方案 > Git Rebase 还是 Squash?

问题描述

我从开发创建了一个功能分支,该功能分支包含大约 20 个提交。在将功能分支合并到开发之前,我想将所有提交转换为一个。哪个是完成此任务的最佳方法 git squash 或 rebase 以及如何做到这一点?

标签: gitgithubbitbucket

解决方案


如果您想将一堆提交压缩到功能分支上的单个提交中,您可以按如下方式进行操作,但是如果这组提交已经被推送到远程,您必须确保没有人在功能分支上工作,因为您'将不得不强制推送到该分支,这意味着重写远程历史记录(如果在公共存储库上工作或更多人在该分支上工作,您通常不希望这样做)。

  1. git checkout FEATURE(其中FEATURE必须替换为您的功能分支的名称。
  2. git rebase -i HEAD~21这是假设您想要压缩 20 个最近的提交。如果你有HASH最旧的提交,你也可以这样做git rebase -i HASH^
  3. 现在您必须在除第一行之外的所有行上替换picksquash(或)并保存文件s
  4. 您必须为此新提交选择一个提交消息。Git 向您显示您正在压缩的提交的消息
  5. 如果原始提交已经被推送到远程,你将不得不强制 push,因为你正在重写远程历史,用一个新的替换这 20 个提交。如果您在该分支上与更多人一起工作,这通常是您不想做的事情。git push -f

推荐阅读