Как отключить редактор для `git rebase --continue`?

Я часто переустанавливаю интерактив, чтобы внести крошечные изменения в историю (например, удалить пустую строку или отредактировать одну строку). В большинстве случаев эти изменения основаны на экспертной оценке.

Сначала я делаю свое изменение следующим образом:

git rebase --interactive 83bbeb27fcb1b5e164318fa17c55b7a38e5d3c9d~
# replace "pick" by "edit" on the first line
# modify code
git commit --all --amend --no-edit
git rebase --continue

Если в одном из следующих коммитов есть конфликты слияния, я разрешаю их и делаю следующее:

git rebase --continue
# the commit message is shown, but does not have to be changed, so I just save and exit the editor
git rebase --continue
# the commit message is shown, but does not have to be changed, so I just save and exit the editor
git rebase --continue
# the commit message is shown, but does not have to be changed, so I just save and exit the editor
...

Есть ли что-то вроде аргумента --no-edit для git rebase --continue, который избегает редактора (аналогично git commit)?


person slartidan    schedule 19.04.2017    source источник
comment
Настройте предпочитаемый редактор на команду «ничего не делает и завершается успешно», например true. Git вызовет его, он ничего не сделает и преуспеет, а Git повторно использует существующее сообщение коммита. Следовательно: GIT_EDITOR=true git rebase --continue.   -  person torek    schedule 19.04.2017
comment
@torek Есть ли способ применить изменение редактора только к одной команде git? Я пробовал ; (вот так: GIT_EDITOR=true;git rebase --continue), но это не сработало. (Я использую Mac, кстати)   -  person slartidan    schedule 19.04.2017
comment
Это (настройка среды через оболочку VAR=val cmd...) действительно влияет только на одну команду плюс все, что она запускает сама. Чтобы повлиять на несколько команд, вы должны установить переменную и экспортировать ее, что в большинстве оболочек export VAR=value; command1; command2; ...   -  person torek    schedule 19.04.2017


Ответы (1)


Можно использовать

GIT_EDITOR=true git rebase --continue

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

В Windows вам нужно будет использовать CMD /V /C

cmd /V /C "set "GIT_EDITOR=true" && git rebase --continue

В обеих ОС вы можете использовать псевдонимы

# Linux
alias grc='GIT_EDITOR=true git rebase --continue'

# Windows
doskey grc=cmd /V /C "set "GIT_EDITOR=true" && git rebase --continue"

Тогда простого grc будет достаточно, чтобы продолжить перебазирование без открытия редактора.

person VonC    schedule 20.08.2017
comment
Установка env var, например var=val, работает только для оболочки. Чтобы заставить работать ti для всех процессов, которые будут запущены после этого, вам нужно вызвать export var. Выполнение всего одной командой может быть export var=val. Но было бы плохой идеей переопределить GIT_EDITOR для всех других вызовов git. Таким образом, последняя рекомендация (var=val command) является лучшей, потому что она не имеет негативных побочных эффектов. - person Victor Yarema; 18.04.2020
comment
@VictorYarema Спасибо за комментарий и правку: теперь этот ответ стал более ясным, благодаря вам. - person VonC; 18.04.2020
comment
Просто прекрасно! - person Kirill Taran; 15.12.2020