J'aimerais donner une perspective différente sur ce que signifie réellement "git pull --rebase", car il semble que cela soit parfois perdu.
Si vous avez déjà utilisé Subversion (ou CVS), vous êtes peut-être habitué au comportement de "svn update". Si vous avez des changements à livrer et que la livraison échoue parce que des changements ont été faits en amont, vous faites "svn update". Subversion procède en fusionnant les changements en amont avec les vôtres, ce qui peut entraîner des conflits.
Ce que Subversion vient de faire, était essentiellement "pull --rebase". L'acte de reformuler vos changements locaux pour qu'ils soient relatifs à la nouvelle version est la partie " rebasement ". Si vous avez fait "svn diff" avant la tentative de livraison ratée, et que vous comparez la différence résultante avec la sortie de "svn diff" après, la différence entre les deux différences est ce que l'opération de rebasement a fait.
La différence majeure entre Git et Subversion dans ce cas est que dans Subversion, "vos" modifications n'existent que sous forme de modifications non-committées dans votre copie de travail, alors que dans Git vous avez des commits réels localement. En d'autres termes, dans Git vous avez bifurqué l'historique ; votre historique et l'historique amont ont divergé, mais vous avez un ancêtre commun.
À mon avis, dans le cas normal où votre branche locale reflète simplement la branche amont et où vous effectuez un développement continu sur celle-ci, la bonne chose à faire est toujours "--rebase", car c'est ce que vous êtes sémantiquement en réalité. en faisant . Vous et d'autres s'attaquent à l'histoire linéaire prévue d'une branche. Le fait que quelqu'un d'autre ait poussé un peu avant votre tentative de poussée n'est pas pertinent, et il semble contre-productif que chaque accident de timing de ce type entraîne des fusions dans l'historique.
Si vous ressentez réellement le besoin que quelque chose soit une branche pour une raison quelconque, c'est une autre préoccupation à mon avis. Mais à moins que vous ayez un désir spécifique et actif de représenter vos changements sous la forme d'une fusion, le comportement par défaut devrait, à mon avis, être "git pull --rebase".
Veuillez tenir compte des autres personnes qui doivent observer et 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 qui représentent de véritables fusions d'efforts de développement intentionnellement divergents ?
2 votes
Source pour les personnes déconseillant git tirer -rebase ? Rebase ou git rebase est séparé activité de git tirer -rebase !