У меня есть много коммитов, которые я хочу раздавить вместе в одну фиксацию. Конечно, я могу заменить pick
на squash
для каждой фиксации, но у меня есть сотни коммитов. Есть ли способ сделать это автоматически?Как сквоить много коммитов автоматически?
2
A
ответ
4
Если у вас есть последовательность фиксации
... - C1 - C2 - C3 - C4 - C5 <- HEAD
и вы хотите сквош C2
к C5
в одну фиксации, вы можете сбросить свою ветку C1
, сохраняя при этом состояния вашего рабочего каталога и постановки области, а затем снова зафиксировать:
git reset --soft C1
git commit
Это потребует повторного ввода сообщения о фиксации. Вы можете, конечно, использовать git log
перед сбросом и копированием частей сообщений фиксации, которые вы хотите сохранить.
Если вы хотите вырезать ветвь признака в единую транзакцию на ветке master
, другой вариант - использовать опцию --squash
для git merge
.
Какой редактор вы используете, чтобы отредактировать этот список коммитов? Вероятно, вам доступна глобальная команда поиска и замены. Например, в vim вы можете использовать ':% s/pick/squash/g' – Jonah
Для этого вы можете использовать переменную' GIT_SEQUENCE_EDITOR'. Взгляните на http://stackoverflow.com/a/27697274/974186 –
Вы хотите сохранить все сообщения о фиксации? Если вы не возражаете при вводе нового сообщения о фиксации, есть простой способ. –