Git интерактивная перезагрузка без открытия редактора

Git позволяет некоторым командам создавать или изменять фиксации, не открывая сначала редактор, например:

git commit --amend --no-edit
git commit --fixup=HEAD^

Я установил rebase.autosquash в true, так что список todo для интерактивной rebase автоматически переупорядочивается. Есть ли способ немедленно выполнить rebase, не открывая сначала редактор, например:

git rebase -i --no-edit HEAD~3

Ответы

Ответ 1

TL; ответ DR: GIT_SEQUENCE_EDITOR=: git rebase -i HEAD~3

Вы не можете остановить git rebase --interactive от запуска "редактора последовательности" (что команда редактирования в "файле последовательности", содержащая команды выбора и т.д.). Однако, если вы изучите интерактивную rebase script:

$ vim $(git --exec-path)/git-rebase--interactive

вы найдете код, подобный этому около 230 или около того:

git_sequence_editor () {
    if test -z "$GIT_SEQUENCE_EDITOR"
    then
        GIT_SEQUENCE_EDITOR="$(git config sequence.editor)"
        if [ -z "$GIT_SEQUENCE_EDITOR" ]
        then
            GIT_SEQUENCE_EDITOR="$(git var GIT_EDITOR)" || return $?
        fi
    fi

    eval "$GIT_SEQUENCE_EDITOR" '"[email protected]"'
}

Таким образом, вам просто нужно настроить редактор последовательности на команду "edit", которая ничего не делает, а затем преуспевает, например, встроенная команда : оболочки или команда true.

(Любой из $GIT_SEQUENCE_EDITOR для этого достаточно сконфигурированного sequence.editor или $GIT_EDITOR, хотя наиболее очевидным из них является первый.)

Ответ 2

В качестве иллюстрации решения toreksolution (GIT_SEQUENCE_EDITOR=:) см. Git 2.21 (февраль 2019 г.):

Когда задано GIT_SEQUENCE_EDITOR, команда была запущена неправильно, когда были запущены режимы "git rebase", которые неявно используют механизм интерактивного перебазирования, что было исправлено.

См. коммит 891d4a0 (28 января 2019 г.) от Филиппа Вуда (phillipwood).
(Merged by Junio C Hamano -- [TG43] -- in commit 69dd6e5, 05 Feb 2019)

неявная интерактивная перебазировка: не запускать редактор последовательностей

Если GIT_SEQUENCE_EDITOR установлен, то rebase запускает его при выполнении неявные интерактивные перебазировки, которые должны появиться неинтерактивен для пользователя.
Исправьте это, установив GIT_SEQUENCE_EDITOR=:, а не GIT_EDITOR=:.