2015-01-29 13 views
2

У меня есть много коммитов, которые я хочу раздавить вместе в одну фиксацию. Конечно, я могу заменить pick на squash для каждой фиксации, но у меня есть сотни коммитов. Есть ли способ сделать это автоматически?Как сквоить много коммитов автоматически?

+2

Какой редактор вы используете, чтобы отредактировать этот список коммитов? Вероятно, вам доступна глобальная команда поиска и замены. Например, в vim вы можете использовать ':% s/pick/squash/g' – Jonah

+0

Для этого вы можете использовать переменную' GIT_SEQUENCE_EDITOR'. Взгляните на http://stackoverflow.com/a/27697274/974186 –

+0

Вы хотите сохранить все сообщения о фиксации? Если вы не возражаете при вводе нового сообщения о фиксации, есть простой способ. –

ответ

4

Если у вас есть последовательность фиксации

... - C1 - C2 - C3 - C4 - C5 <- HEAD 

и вы хотите сквош C2 к C5 в одну фиксации, вы можете сбросить свою ветку C1, сохраняя при этом состояния вашего рабочего каталога и постановки области, а затем снова зафиксировать:

git reset --soft C1 
git commit 

Это потребует повторного ввода сообщения о фиксации. Вы можете, конечно, использовать git log перед сбросом и копированием частей сообщений фиксации, которые вы хотите сохранить.

Если вы хотите вырезать ветвь признака в единую транзакцию на ветке master, другой вариант - использовать опцию --squash для git merge.