Рассмотрим следующий сценарий:
- Я проверил ветку от мастера
- я сделал несколько коммитов
- Я слил обновленный мастер
- Я сделал еще несколько коммитов
- Теперь я хочу перебазировать коммиты из пункта 4, чтобы коммиты из пункта 2 не пострадали.
Итак, если у меня изначально:
(1) (2)
x--x--x--x--x--x--x master
\ \
y--y--Y--y--y dev
(2)(3) (4)
Я хочу получить:
(1) (2)
x--x--x--x--x--x--x master
\ \
y--y--------Y'--y'--y' dev
(2) (5) (5)
Если я просто сделаю git rebase master
, он перебазирует коммиты как из 2, так и из 4 и удалит слияние из 3. Это не то, что я хочу.
Существует также возможность выполнить git merge master
, затем git rebase -i -p
перед фиксацией слияния из 3 и переместить последнее слияние после слияния из 3 и выполнить исправление/раздавить его в слияние из 3. Обновление: это не работать так легко. Git отказывается раздавливать два слияния. Эта проблема: git rebaseinteractive: слияние сквоша выполняется вместе.
merge --onto
: этоrebase --onto
). Я обновил ответ, чтобы приблизиться ближе к тому, что вы хотите. - person VonC   schedule 25.09.2013reset --soft
, упомянутый в stackoverflow.com/q/1725708/6309, может помочь. Хотя не уверен в точной последовательности. - person VonC   schedule 25.09.2013