Я не уверен, насколько можно доверять rebase -p
(или rebase -r
).Но я знаю более простой способ выйти из вашей ситуации.
Сохраняйте свою историю простой и не полагайтесь на сложные слияния и перебазировки.Вы можете сделать это, отменив объединение dev с мастером, обновив master, а затем снова включив dev в master.
D - E [origin/master]
/
A - B - C - M [master]
\ /
X - Y - Z [dev]
Отменить слияние.
git branch -f master C
D - E [origin/master]
/
A - B - C [master]
\
X - Y - Z [dev]
Обновить master.
git checkout master
git pull --rebase
[master]
A - B - C - D - E [origin/master]
\
X - Y - Z [dev]
Повторите объединение.
git merge dev
[origin/master]
A - B - C - D - E - F [master]
\ /
X - Y --------- Z [dev]
Еще лучше, перебазируйте dev на вершину мастера, проверьте его, затем объедините.
Запуск после объединенияотменить и мастер обновляется ...
[master]
A - B - C - D - E [origin/master]
\
X - Y - Z [dev]
Перебазировать dev поверх мастера.
[master]
A - B - C - D - E [origin/master]
\
X1 - Y1 - Z1 [dev]
Test dev.
Затем объединить с --no-ff
для сохранения«характерный пузырь» в истории.Обратите внимание, что это слияние не изменится.Когда вы тестировали dev
, вы также тестировали это слияние.
[origin/master]
A - B - C - D - E ------------ F [master]
\ /
X1 - Y1 - Z1 [dev]
Преимущество заключается в том, что вы можете протестировать dev
в его окончательной завершенной форме без слияния.Он хранит историю очень просто, без лишних обновлений сливается.И это сохраняет ветку для археологии кода.