учитывая следующий сценарий:
- Мы разрабатываем фичи по разным тематическим веткам.
- Перед релизом объединяем все темы-ветки в
master
. Затем в этой ветке начинается непрерывная интеграция. - Кроме того, мы также вносим небольшие изменения (опечатки и т. д.) непосредственно в основную ветку.
- Если все работает нормально, мы сливаем все изменения из основной ветки в ветку релиза. Затем эта ветка релиза будет отправлена
Этот рабочий процесс хорош, если в наших тестах все в порядке. Но как только мы решаем не отправлять фичу из мастера, у нас возникают проблемы.
Например:
- У нас есть 5 тематических веток для разных функций
- Мы объединяем их все в
master
- Кроме того, у нас есть 2 отдельных коммита непосредственно на мастере (мы исправили некоторые опечатки)
- Теперь мы обнаруживаем, что 1 из 5 функций не работает должным образом, мы не можем его отправить.
- Мы по-прежнему хотим отправить остальные 4 функции (+ 2 коммита, сделанные непосредственно на мастере).
Единственный вариант, который у нас есть сейчас, это: - объединить 4 ветки темы непосредственно в релиз - выбрать 2 коммита на мастере в релизе
Это может быть довольно раздражающим, особенно когда мы не отслеживаем коммиты, сделанные непосредственно на мастере, и их число увеличивается.
Я хотел бы иметь сценарий, в котором мы можем:
- увидеть все коммиты (или лучше: объединенные ветки)
- отбросить все изменения, которые мы не хотим иметь в следующем релизе
- объединить все остальные изменения в релиз
Я уже провел некоторое исследование и столкнулся с git rebase
. git rebase --interactive
оказался довольно близок к тому, что я ожидал.
Лучшим сценарием будет:
- перебазировать все изменения с мастера на релиз в интерактивном режиме
- удалить все коммиты (или лучшие ветки), которые мне не нужны
- релиз имеет только те изменения, которые я хочу
Однако проблема в следующем:
Когда я делаю:
git checkout master
git rebase --interactive release
<changes>
В итоге я модифицирую основную ветку, а не ветку выпуска. Добавление опции --onto release
тоже не помогает.
Есть ли возможность зафиксировать результаты rebase на другой ветке?
с уважением Лейф