Обязательно используйте параметр -i
с --autosquash
. Новые версии Git могут не требовать этого, но более старые будут (и это не повредит).
Что касается вашего комментария : перебазирование сложное.
В частности, git rebase
является внешним интерфейсом, который анализирует параметры и другие аргументы, а затем вызывает одну из нескольких различных реализаций rebase:
git-rebase--am
- это оригинальная rebase, начиная с задолго до того, как даже самые старые текущие версии Git все еще используются (1,7 эпоха). Он использует git format-patch
и git am
и является наименее способным (но самым быстрым) перебазированием.
git-rebase--interactive
является стандартным бэкэндом для всех интерактивных перебазировок вплоть до Git версии 2.13 , Он использует git cherry-pick
.
git-rebase--merge
- это вариант неинтерактивного ребазинга, в котором используется cherry-pick. Это форма перебазирования, которую вы получаете с git rebase -m
, git rebase -s <em>strategy</em>
или git rebase -X <em>eXtended-argument</em>
, если только вы не добавите явное -i
, в этом случае вы получите интерактивный сервер.
git-rebase--preserve-merges
- это серверная часть специального назначения, отделенная в Git версии 2.19.0. Он реализует старый стиль git rebase -p
. (Для нового git rebase -r
требуется новая перебазировка на основе секвенсора, упомянутая ниже.)
Начиная с Git 2.13 и продвигаясь дальше через Git 2.19 (когда пресерва сливается обратно конец был отделен), интерактивный бэкэнд перебазирования стал более функциональным (и был написан меньше в сценарии оболочки и больше в C), и теперь использует Git секвенсор код, который ранее в основном был реализовано git cherry-pick
и git revert
.
По состоянию на Git 2.20 git-rebase--interactive
больше не существует вообще (но git rebase -i
по-прежнему выполняет интерактивную перебазировку). Начиная с Git 2.23, git-rebase--am
больше не существует в качестве отдельного внутреннего сценария (но этот стиль перебазирования все еще существует, он обрабатывается более напрямую).
По состоянию на Git 2.26, git rebase
больше не использует механизм стиля am
по умолчанию. (Это может означать, что вам не нужен отдельный параметр -i
, но мои собственные Git установки не являются новыми, поэтому я не проверял их.)
* * 1065 Опция * требует использования интерактивного внутреннего механизма и требует, чтобы Git генерировал список коммитов, которые могут быть применены, чтобы код мог проверять субъекты fixup!
и squash!
. В частности, использование интерактивного механизма отключает проверку «уже обновлено».