Je voudrais apporter une perspective différente sur ce que signifie réellement «git pull --rebase», car il semble parfois se perdre.
Si vous avez déjà utilisé Subversion (ou CVS), vous pouvez être habitué au comportement de "svn update". Si vous avez des modifications à valider et que la validation échoue parce que des modifications ont été apportées en amont, vous "mettez à jour svn". Subversion procède en fusionnant les modifications en amont avec les vôtres, ce qui peut entraîner des conflits.
Ce que Subversion vient de faire, c'était essentiellement du «pull --rebase». Le fait de reformuler vos modifications locales pour qu'elles soient relatives à la version la plus récente en est la partie "rebasage". Si vous aviez fait "svn diff" avant la tentative de validation échouée et comparez le diff résultant avec la sortie de "svn diff" après, la différence entre les deux diff est ce que l'opération de rebasage a fait.
La différence majeure entre Git et Subversion dans ce cas est que dans Subversion, "vos" modifications n'existent qu'en tant que modifications non validées dans votre copie de travail, tandis que dans Git vous avez des validations réelles localement. En d'autres termes, dans Git, vous avez bifurqué l'histoire; votre histoire et l'histoire en amont ont divergé, mais vous avez un ancêtre commun.
À mon avis, dans le cas normal d'avoir votre branche locale reflète simplement la branche en amont et en faire un développement continu sur elle, la bonne chose à faire est toujours « --rebase », parce que c'est ce que vous sémantiquement réellement faites . Vous et d'autres piratez l'histoire linéaire voulue d'une branche. Le fait que quelqu'un d'autre ait poussé légèrement avant votre tentative de poussée n'est pas pertinent, et il semble contre-productif que chaque accident de ce type entraîne des fusions dans l'histoire.
Si vous ressentez réellement le besoin que quelque chose soit une succursale pour une raison quelconque, c'est une préoccupation différente à mon avis. Mais à moins que vous n'ayez un désir spécifique et actif de représenter vos modifications sous la forme d'une fusion, le comportement par défaut devrait, à mon avis, être "git pull --rebase".
Veuillez considérer d'autres personnes qui ont besoin d'observer et de comprendre l'histoire de votre projet. Voulez-vous que l'histoire soit jonchée de centaines de fusions partout, ou voulez-vous seulement les quelques fusions sélectionnées qui représentent de véritables fusions d'efforts de développement divergents intentionnels?