Короткий ответ - нет: rebase не знает семантику и не может исправить ваш код за вас.
Более длинный ответ: если у вас есть автоматические тесты, вы можете использовать эти автоматические тесты проверяют каждый коммит, который будет делать ребаз. Когда эти тесты не пройдены, человек может посмотреть на неудачный коммит.
Помните, что rebase принципиально работает, копируя некоторые оригинальные серии коммитов в новые и (предположительно) улучшенные коммиты. Это эквивалентно использованию git cherry-pick
по одному на каждом обычном (без слияния) коммите (и коммиты слияния обычно удаляются полностью). Между тем Git в общем находит коммиты, используя тот факт, что имя ветки указывает на последний коммит в этой ветке. Каждый коммит, независимо от того, сколько веток его содержит, указывает на свой родительский коммит, который формирует обратную цепочку коммитов; каждый коммит в цепочке может быть скопирован.
Так что git rebase
работает - «меняет» ветвь путем:
- Выводит список коммитов для копирования (их идентификаторы ha sh) ). Этот список заканчивается коммитом, который идентифицирует имя ветви.
- Проверка указанного c перебазирования целевого коммита как отдельного HEAD.
- Использование cherry-pick или эквивалента для копирования одного коммита в время из списка, сделанного в шаге 1.
- Перемещение имени ветви, чтобы оно идентифицировало окончательный скопированный коммит, и повторное присоединение HEAD.
Когда вы запускаете git rebase
Вы можете добавить -x <em>command</em>
(или более длинное написание, --exec <em>command</em>
) в качестве опции. Это запустит выбранную команду после копирования каждого коммита. Если выбранная команда сообщает об успехе, 1 rebase переходит к следующему коммиту как обычно. Если он сообщает о сбое, в этот момент перебазирование прекращается, возвращая управление человеку.
Теперь человек должен исследовать сбой и внести необходимые исправления. Он / она / они / местоимение могут запускать тесты, если / при необходимости, git add
файлов и git commit --amend
. Как только проблема будет решена, они могут просто git rebase --continue
перейти к следующему коммиту.
Этот трюк -x
работает особенно хорошо, если у вас есть набор тестов, который предоставляет правильный статус. В этом конкретном случае тест может быть таким же простым, как и запуск make
, который обычно предоставляет правильный статус, хотя фактические тесты являются хорошей идеей.
(Не каждый тестирует каждый коммит и иногда для этого не хватает времени, но чем больше тестов вы можете выполнить, тем лучше в большинстве случаев.)
1 «Успех» означает exit 0
; сбой означает, что состояние выхода было ненулевым. Ну, разве что вы находитесь в VMS, где выход с кодом 0 или 1 из C кода должен сообщать об успехе, и только четные числа, начинающиеся с 2, должны сообщать об ошибке.