Parfois, nous avons un amont qui relocalisée/remonter une branche nous sommes des selon les. Cela peut être un gros problème, causant un désordre conflits pour nous si nous sommes en aval.
La magie de commande est - git pull --rebase
Normal git pull est, grosso modo, quelque chose comme ceci (nous allons utiliser une distance appelée origine et une branche appelée foo dans tous ces exemples):
# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo
À première vue, vous pourriez penser qu'un git pull --rebase fait juste cela:
git fetch origin
git rebase origin/foo
Mais cela ne l'aidera pas si, en amont, rebase impliqués "écraser" (ce qui signifie que le patch id de la commet changé, et pas seulement leur ordre).
Ce qui signifie git pull --rebase a faire un peu plus que cela. Voici une explication de ce qu'il fait et comment.
Disons-votre point de départ est ceci:
a---b---c---d---e (origin/foo) (also your local "foo")
Time passes, and you have made some commits on top of your own "foo":
a---b---c---d---e---p---q---r (foo)
Pendant ce temps, dans un ajustement de l'anti-social de la rage, de la responsable amont n'a pas seulement relocalisée son "toto", il a même utilisé un squash ou deux. Son commit de la chaîne d'ressemble maintenant à ceci:
a---b+c---d+e---f (origin/foo)
Un git pull à ce stade, le résultat serait le chaos. Même un git fetch; git rebase origine/foo ne serait pas le couper, parce que s'engage "b" et "c" sur une face, et de s'engager "b+c" sur l'autre, serait en conflit. (Et de même avec d, e et d+e).
Ce que git pull --rebase fait, dans ce cas, est:
git fetch origin
git rebase --onto origin/foo e foo
Cela vous donne:
a---b+c---d+e---f---p'---q'---r' (foo)
Vous pouvez toujours obtenir les conflits, mais ils seront de véritables conflits (entre p/q/r et a/b+c/d+e/f), et pas de conflits causés par les b/c en conflit avec b+c, etc.