Git - Le pouvoir de `rebase --onto`

Le problème

Alors, perso, comme je suis une dev sympa, j’essaie de faire une Pull Request (PR) par topic. Forcément, quand je suis sur un gros sujet, je les stack les unes sur les autres. Concrêtement ça veut dire que

git checkout main
git branch branch-1
git commit -m "#1"
git commit -m "#2"
git commit -m "#3"
# J'ouvre une PR et j'attends que mes gentils collègues me review.
git branch branch-2 # notez que je suis toujours sur `branch-1`
git commit -m "#1"
...

Du coup, l’historique de branch-2 comprends tous les commits de branch-1.
Et paf, branch-1 est squashed & merged sur main avec un simple commit de merge.

Dans ma vie d’avant je faisais :

git checkout main
git pull
git checkout branch-2
git rebase main

Et coucou les conflits ! Ou alors, je me risquais a un git rebase -i en me disant que de toutes façons, je pourrais toujours me rabattre sur git reflog.
Seulement, voila, il y a mieux !

La solution

On peut tout simplement :

git checkout main
git pull
git checkout branch-2
git rebase --onto main branch-1 branch-2

🤯 boom! Me remerciez pas 😏