Prenons le cas suivant:
J'ai du travail dans une branche thématique et maintenant je suis prêt à reprendre le master:
* eb3b733 3 [master] [origin/master]
| * b62cae6 2 [topic]
|/
* 38abeae 1
J'effectue la fusion à partir du maître, je résous les conflits et maintenant j'ai:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | eb3b733 3 [origin/master]
|/
* 38abeae 1
Maintenant, la fusion m'a pris un certain temps, alors je fais une autre récupération et remarque que la branche principale distante a de nouveaux changements:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
| | * e7affba 4 [origin/master]
| |/
|/|
* | eb3b733 3
|/
* 38abeae 1
Si j'essaye 'git rebase origin / master' de master, je suis obligé de résoudre à nouveau tous les conflits, et je perds également le commit de fusion:
* d4de423 2 [master]
* e7affba 4 [origin/master]
* eb3b733 3
| * b62cae6 2 [topic]
|/
* 38abeae 1
Existe-t-il un moyen propre de rebaser le commit de fusion afin que je me retrouve avec un historique comme celui que je montre ci-dessous?
* 51984c7 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | e7affba 4 [origin/master]
* | eb3b733 3
|/
* 38abeae 1
git config --global pull.rebase preserve
pour toujours préserver les commits de fusion lors d'un rebase
git --rebase-merges
remplacera à terme l'ancien git --preserve-merges
. Voir Que fait exactement « rebase --preserve-merges
» de Git (et pourquoi?)
--preserve-merges
est obsolète. Utilisationgit rebase --rebase-merges origin/master
git rebase --preserve-merges origin/master