首页 > 解决方案 > 为什么 git rebase HEAD~3 --autosquash 不压缩修复?

问题描述

在此处输入图像描述

运行后git rebase HEAD~3 --autosquash没有任何变化......为什么?

标签: git

解决方案


请务必使用-i带有 的选项--autosquash。新版本的 Git 可能不需要它,但旧版本会(而且它不会受到伤害)。

至于您的评论:变基很复杂。

特别git rebase是前端,它解析选项和其他参数,然后调用几个不同的 rebase 实现之一:

  • git-rebase--am是最初的变基,甚至可以追溯到仍在使用的最古老的当前 Git 版本(1.7 时代)之前。它使用git format-patchandgit am并且是能力最差(但最快)的 rebase。

  • git-rebase--interactive是直到 Git 2.13 版之前所有交互式变基的标准后端。它使用git cherry-pick.

  • git-rebase--merge是使用cherry-pick的非交互式rebase的变体。这是您使用 , 或 获得的变基形式git rebase -m,除非您也添加显式,在这种情况下您将获得交互式后端。git rebase -s strategygit rebase -X eXtended-argument-i

  • git-rebase--preserve-merges是在 Git 版本 2.19.0 中分离出来的一个特殊用途的后端。它实现了旧样式git rebase -p。(新的git rebase -r需要下面提到的新的基于音序器的变基。)

  • 从 Git 2.13 开始,一直到 Git 2.19(当保留合并后端被拆分时),交互式 rebase 后端变得更加强大(并且在 shell 脚本中编写得更少,在 C 中编写得更多),现在使用 Git 的序列器代码,之前主要实现git cherry-pickgit revert.

  • 从 Git 2.20 开始,git-rebase--interactive根本不再存在(但git rebase -i仍然会进行交互式变基)。从 Git 2.23 开始,git-rebase--am不再作为单独的后端脚本存在(但这种变基风格仍然存在,只是处理得更直接)。

  • 从 Git 2.26 开始,git rebase不再am默认使用样式机制。(这可能意味着您不需要单独的-i选项,但我自己的 Git 安装不是这个新的,所以我没有测试它。)

--autosquash选项需要使用交互式后端机制,并要求 Git 生成可能应用的提交列表,以便代码可以检查fixup!squash!提交主题。特别是使用交互式机器会禁用“已经是最新的”检查。


推荐阅读