Je me retrouve souvent dans un flux de travail où je fais ce qui suit :
- Créer une branche de fonctionnalité ("
foo
") à partir de notre branchedevelop
("master") - Travailler, travailler, travailler...
- Soumettre une demande de tirage pour
foo
- En attendant l'approbation, commencer le travail sur une fonctionnalité connexe... :
- Créer une autre branche de fonctionnalité ("
bar
") à partir de ma précédente branchefoo
- ...parce que le travail est si étroitement lié que je ne pouvais pas progresser directement depuis
develop
+ je ne peux pas attendre les examens -- ils prennent parfois plus d'une semaine - Soumettre une demande de tirage pour
bar
- Obtenir l'approbation pour
foo
et la fusionner dansdevelop
- [nous utilisons des fusions écrasées]
- Les gens examinent
bar
, il y a des commentaires, peut-être quebar
est déjà approuvé à ce stade - Maintenant je rébase
bar
comme suit : git checkout bar
git rebase --onto develop foo
git push --force origin bar
- Obtenir l'approbation pour
bar
si ce n'est pas déjà approuvé à ce stade, et le fusionner dansdevelop
Cela fonctionne comme prévu, mais il réécrit l'historique, et est mal vu parce que des personnes ont déjà regardé bar
, et il n'y a aucun moyen de savoir vraiment ce que j'ai fait lorsque j'ai effectué un push forcé.
Si j'essaie de fusionner sans rebaser, j'obtiens toutes sortes de conflits de fusion. C'est comme si develop
essayait de "annuler" mes changements dans bar
.
Ma question est :
Y a-t-il un flux de travail équivalent à git merge
pour git rebase --onto
??? Quelque chose comme :
git checkout bar
git merge ??? develop ??? foo
Y a-t-il un truc comme... peut-être que je fusionne foo
de nouveau sur bar
, ou un truc en définissant la montée en amont ? Je tâtonne ici...
Merci !
MODIFIER : Une autre chose... même ce processus peut être pénible si j'ai plusieurs validations dans bar
. J'ai généralement à fusionner foo
dans bar
à la fin, donc il n'y a certainement pas de conflits entre eux. Mais il pourrait y avoir un conflit entre une validation précoce de bar
et la dernière foo
. Alors je dois faire un git rebase -i bar
sur bar
et l'aplatir en une seule validation avant de faire le git rebase --onto develop foo
... Pas génial pour conserver l'historique... parce que maintenant j'aplati les validations de commentaire, et ainsi de suite. Donc parfois j'utilise une autre alternative :
git checkout bar
git reset foo
git add trucs
git commit -m "Une validation de l'écart foo-bar"
Encore une fois, crasseux -- tout l'historique des validations de commentaires est perdu...