Bazen bağlı olduğumuz bir dalı yeniden bastıran / geri saran bir akış yukarı var. Bu büyük bir sorun olabilir - aşağı yönde olursak bizim için dağınık çatışmalara neden olur.
Sihir git pull --rebase
Normal bir git çekme, gevşek bir şekilde, böyle bir şeydir (tüm bu örneklerde origin adlı bir uzaktan kumanda ve foo adlı bir dal kullanacağız):
# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo
İlk bakışta, bir git pull --rebase'in bunu yaptığını düşünebilirsiniz:
git fetch origin
git rebase origin/foo
Ancak, yukarı akış rebazı herhangi bir "ezme" içeriyorsa bu işe yaramayacaktır (yani, taahhütlerin yama kimliklerinin sadece sıraları değil, değiştiği anlamına gelir).
Yani git pull --rebase bundan biraz daha fazlasını yapmak zorunda. İşte ne yaptığına ve nasıl yapıldığına dair bir açıklama.
Diyelim ki başlangıç noktanız bu:
a---b---c---d---e (origin/foo) (also your local "foo")
Zaman geçiyor ve kendi "foo" nuzun üstüne bazı taahhütler verdiniz:
a---b---c---d---e---p---q---r (foo)
Bu arada, anti-sosyal öfke bir uyum içinde, memba bakıcısı sadece onun "foo" unu yeniden basmakla kalmadı, hatta bir veya iki squash kullandı. Taahhüt zinciri şimdi şöyle görünüyor:
a---b+c---d+e---f (origin/foo)
Bu noktada bir git hareketi kaosa neden olur. Git getirisi bile; git rebase origin / foo bunu kesmez, çünkü bir tarafta "b" ve "c" ve diğerinde "b + c" taahhüt eder. (Ve benzer şekilde d, e ve d + e).
git pull --rebase
Bu durumda, ne yapar:
git fetch origin
git rebase --onto origin/foo e foo
Bu size şunları sağlar: