2017-07-25 11 views
2

J'ai travaillé sur une équipe de développement qui préférait utiliser la méthode git fetch puis git rebase plutôt que la méthode git pull, avant de pousser les changements pour éviter les conflits de fusion.Mis à part la structure de l'arbre git qui en résulte, y a-t-il des différences importantes entre git pull et git fetch + git rebase?

Existe-t-il une raison spécifique à la différence de la structure arborescente visuelle? Selon http://mattsnider.com/git-rebase-versus-git-pull/fetch & rebase

« produira une histoire propre, sans fusion étrangère engage »

mais entre les deux méthodes sont-il d'autres raisons de choisir l'un sur l'autre?

+0

Vous pouvez configurer 'pull' git pour exécuter' rebase' git au lieu de 'git merge' comme sa deuxième étape. En fin de compte, ça ne change pas grand-chose à * operation *, mais je pense que git pull fait un sérieux dés-service à * humains * en cachant le fait qu'il y a réellement deux étapes impliquées: 'git fetch', et puis cette deuxième étape. La commande 'pull' est également syntaxiquement dangereuse en raison de ce même défaut humain: il est trop facile de lancer' git pull origin b1 b2' et de finir par faire une fusion de poulpe, parce que * ressemble à 'git pull' fait quelque chose de magique, mais ça ne l'est vraiment pas. – torek

+0

'git merge' crée un commit de fusion lorsqu'il ne s'agit pas d'une fusion fast-forward. Un commit de fusion n'invoque pas un hook comme 'commit-msg'. Dans certains cas, lorsque vous avez besoin de commit-msg pour faire quelque chose avec chaque nouvelle validation, le commit de fusion est ignoré à moins que vous ne le modifiiez. – ElpieKay

Répondre

1

git pull = git fetch + git merge

git pull --rebase ou git pull -r = git fetch + git rebase

Pas plus, pas moins ;-) il n'y a pas de magie. Donc, vous pouvez faire la seconde. Le principal avantage de faire fetch puis rebaser en 2 étapes distinctes est que le premier ne modifie pas votre branche locale (absolument aucun risque) et que vous pouvez le faire à chaque fois (vous pouvez même créer une tâche qui l'exécute) périodiquement).

Et une fois tiré par les cheveux, vous pourriez regarder l'histoire, le comparer à vos commits, et de décider ce que vous voulez faire et quand ...