Можно ли легко переместить все коммиты из одной ветви в другую как один коммит?

Я знаю, что могу сделать интерактивный перебаз, перефразировать первый коммит и исправить все остальное. Но если ветка содержит сотни коммитов, она становится очень утомительной.

Есть ли более простой способ?

2 ответа

Решение

Ты можешь использовать git merge --squash раздавить коммиты в один, сливаясь с веткой.

Переключиться на целевую ветку

$ git checkout target-branch

затем используйте

$ git merge --squash original-branch

Все коммиты в original-branch будет объединен в один и применен к target-branch,

Вы можете сделать это с git cherry-pick -n, Такой подход является более гибким по сравнению с git merge --squash поскольку он позволяет указать произвольный диапазон коммитов:

git cherry-pick -n OTHER_BRANCH~100..OTHER_BRANCH
git commit -m "Merged 100 commits from OTHER_BRANCH"

git cherry-pick

-n|--no-commit

Обычно git cherry-pick Команда автоматически создает последовательность коммитов. Этот флаг применяет изменения, необходимые для выбора каждого именованного коммита, в ваше рабочее дерево и индекс без каких-либо коммитов. Кроме того, когда используется эта опция, ваш индекс не должен соответствовать фиксации HEAD. Выбор вишни выполняется против начального состояния вашего индекса.

Это полезно, когда вишня выбирает более одного эффекта коммитов для вашего индекса подряд.

Другие вопросы по тегам