Git Interactive ReBase: остановка без фиксации - PullRequest
0 голосов
/ 14 ноября 2018

(TLDR) Есть ли в git rebase -i способ остановить редактирование без идентификатора коммита? (/ TLDR)

Более длинная версия:

Фон

С помощью git rebase -i я получаю текстовый редактор, в котором я могу определить список команд, начиная с pick COMMIT_ID в каждой строке.

Один из вариантов - заменить «pick COMMIT_ID» на «edit COMMIT_ID», что означает, что после коммита он остановится, чтобы изменить коммит или выполнить некоторые ручные операции. Тогда я могу продолжить с git rebase --continue.

Из списка опций:

#  e, edit = use commit, but stop for amending

Вопрос

Интересно, есть ли возможность остановить редактирование без выбора коммита.

Мотивация / Вариант использования

например. если я хочу сжать диапазон коммитов, а затем остановиться для некоторых ручных операций, мне придется поместить edit + squash перед тем же идентификатором коммита - что недопустимо.

Вместо этого я бы сделал что-то вроде этого:

pick COMMIT_0 Change some colors
pick COMMIT_1 Make it faster
squash COMMIT_2 Fix a typo in previous commit
squash COMMIT_3 Fix another typo in previous commit
edit
pick COMMIT_4 Refactor some things
pick COMMIT_5 Introduce new options

Такая опция также позволит остановить перед первым коммитом в последовательности.

(я собирался сказать, что это позволит редактировать до первоначальной фиксации всей истории, но это не так - первоначальная фиксация никогда не является частью последовательности rebase)

Если я делаю это так, git говорит так:

Предупреждение: SHA-1 отсутствует или не является коммитом в следующей строке:

Интересно, что эффект более или менее тот, что я хочу, он останавливается, и я могу что-то делать. Но я уверен, что это не намеченный способ сделать это.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

У вас есть один, два или три варианта, в зависимости от некоторых обстоятельств.

Первый вариант

Вставка

exec false

или его краткая форма

x false

в точке, где вы хотите остановиться.Как вы, возможно, знаете, exec запускает команду оболочки в той точке, где она появляется;но если команда завершается с ошибкой, git rebase останавливается, а команда false всегда завершается с ошибкой.

Второй параметр

Если вы используете Git 2.20 или более позднюю версию, вы можете вставить

break

или его краткая форма

b

в точке, где вы хотите остановиться.Эта команда была введена именно для той цели, которую вы запрашиваете.

Третий вариант

Отметьте коммит до точки, где вы хотите остановиться, с помощью edit вместо pick.Очевидно, что это не работает, если вы хотите остановить перед первым коммитом или после squash или fixup коммита.

0 голосов
/ 14 ноября 2018

Я не знаю, возможно ли это. После сквоша вы должны сделать вторую интерактивную перебазировку и затем изменить коммит.

...