J'ai commencé à utiliser git il y a quelque temps et je ne comprends pas bien les subtilités. Ma question fondamentale ici est de découvrir la différence entre a git pull
et git pull --rebase
, car l'ajout de l' --rebase
option ne semble pas faire quelque chose de très différent: fait juste un pull.
Veuillez m'aider à comprendre la différence.
Réponses:
git pull
=git fetch
+git merge
contre le suivi de la branche amontgit pull --rebase
=git fetch
+git rebase
contre le suivi de la branche amontSi vous voulez savoir comment
git merge
etgit rebase
différez, lire .la source
git pull --rebase
est la même chosegit fetch
etgit rebase
est fondamentalement comment c'est, mais ce n'est pas exactement sémantiquement équivalent. Il existe certaines différences, dont certaines sont expliquées ici. gitolite.com/git-pull--rebasefetch
?Réponse tirée de (et légèrement modifiée):
http://gitolite.com/git-pull--rebase
la source
a---b+c---d+e---f---p'---q'---r' (foo)
car le rebase change les hachages.A
, et j'ai envoyé un PR au repo en amont qui a été accepté. Ensuite, quand j'ai faitgit pull --rebase
contre le dépôt en amont, je n'ai pas obtenu de nouveauA'
commit au-dessus du dépôt en amont tiré. En fait, il n'enA'
existait pas du tout. Est-ce parce queA
le système a été fusionné? Ou est-ce parce qu'il n'y avait pas de différence entre l'amont et ma version rebasée?git pull --rebase
. Mais une chose qui m'embrouille dans cette situation hypothétique est que le mainteneur en amont a modifié l'historique du projet qui a déjà été intégré dans les référentiels du développeur local. N'est-ce pas simplement une mauvaise pratique en général? S'il voulait écraser l'historique des validations / réécritures, cela aurait dû être fait avant de l'intégrer dans le référentiel central pour éviter ce type de conflits.Supposons que vous ayez deux validations dans la branche locale:
Après "git pull", ce sera:
Après "git pull --rebase", il n'y aura plus de point de fusion G. Notez que D et E deviennent des commits différents:
la source
git rebase
fait? Mais nous parlonsgit pull --rebase
. Et ce sont des choses différentes.Dans le cas le plus simple d'absence de collision
Voir également:
man git-pull
Voir aussi:
Quand dois-je utiliser git pull --rebase?
http://git-scm.com/book/en/Git-Branching-Rebasing
la source
git sdd modified-file; git rebase --continue
ou fusionnez:git add modified-file; git commit;
oùmodified-file
est votre fichier local que vous avez modifié manuellement / mergetoolfetch
? Pourquoi ont-ils créé deuxrebase
flux? 1)git rebase
et 2)git pull --rebase
?Pour cela, il est important de comprendre la différence entre fusionner et rebaser.
Pour plus de détails, consultez - http://www.derekgourlay.com/archives/428
la source