Во время обработки огромного интерактивного перебазирования с большим количеством сквошов и запроса git о разрешении пустых коммитов, потому что это действительно должно привести к некоторым пустым коммитам после некоторых сквошов, он все равно перестает предупреждать нас об этом нашел пустой коммит. Итак, мы должны просить его продолжать каждый раз, когда он останавливается.
Как сделать так, чтобы он никогда не остановился? И затем, избавляя нас от необходимости продолжать это?
На самом деле, мы в настоящее время используем скрипт для запуска git rebase --continue
каждый раз, когда он останавливается, но как этого избежать?
Git флажки rebase для запуска масштабной перезагрузки: Внешний и пользовательский редактор, настроенный на GIT_SOURCE_EDITOR
, редактирует интерактивную замену для нас, помещая сквош в некоторые специально рассчитанные места в соответствии с алгоритмом.
GIT_EDITOR='cat' \
GIT_SEQUENCE_EDITOR='auto-rebase-editor $1' \
git rebase --allow-empty -i $(git log --oneline --reverse --pretty=format:%H | head -n1)
Git вывод: (коммит хэши и электронная почта заменены на «??????» и «@email»)
...
You are currently rebasing branch 'clean-branch' on '??????'.
No changes
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
Could not apply ??????... @email
Обходной путь, чтобы попросить его просто продолжать каждый раз, когда он останавливается:
Флаг --keep-empty
в git rebase --continue
не работает, он все равно останавливается каждый раз, когда обнаруживает пустой коммит, и флаг --allow-empty
, используемый в git rebase -i
, когда он был запущен в начале перебазировки, также не работает. Это просто останавливается, это не имеет значения, аргумент.
count=0; while true; do \
gout=$(git status); \
if [[ $gout == "interactive rebase in progress"* ]]; then \
count=$((count+1)); \
echo -e "\n\nContinuing rebase #$count"; \
git rebase --continue; \
else \
echo "Total continued stops: $count"; \
break; \
fi; \
done