Возьмем следующий случай:
У меня есть некоторая работа в тематической ветке, и теперь я готов вернуться к мастеру:
* eb3b733 3 [master] [origin/master]
| * b62cae6 2 [topic]
|/
* 38abeae 1
Я выполняю слияние из мастера, разрешаю конфликты, и теперь у меня есть:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | eb3b733 3 [origin/master]
|/
* 38abeae 1
Теперь слияние заняло у меня некоторое время, поэтому я делаю еще одну выборку и замечаю, что в удаленной главной ветке есть новые изменения:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
| | * e7affba 4 [origin/master]
| |/
|/|
* | eb3b733 3
|/
* 38abeae 1
Если я попробую git rebase origin/master
от мастера, мне придется снова разрешить все конфликты, и я также потеряю фиксацию слияния:
* d4de423 2 [master]
* e7affba 4 [origin/master]
* eb3b733 3
| * b62cae6 2 [topic]
|/
* 38abeae 1
Есть ли чистый способ переустановить фиксацию слияния, чтобы я получил историю, подобную той, которую я показываю ниже?
* 51984c7 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | e7affba 4 [origin/master]
* | eb3b733 3
|/
* 38abeae 1
git config --global pull.rebase preserve
, чтобы всегда сохранять коммиты слияния во время перебазирования - person galath   schedule 19.01.2018git --rebase-merges
в конечном итоге заменит старыйgit --preserve-merges
. См. Что именно делает Git «rebase --preserve-merges
» (и почему?) - person VonC   schedule 27.05.2018git rebase -p origin/master
- person Felipe Alvarez   schedule 18.08.2018--preserve-merges
устарел. Используйтеgit rebase --rebase-merges origin/master
- person Arjun Sreedharan   schedule 11.10.2019