Siz birleştirirsiniz. Bu aslında oldukça basit ve mükemmel bir yerel operasyon:
git checkout b1
git merge master
# repeat for b2 and b3
Bu, tarihi tam olarak olduğu gibi bırakır: Ustadan çatallandınız, tüm dallarda değişiklikler yaptınız ve son olarak ustadan değişiklikleri üç dalın içine dahil ettiniz.
git
Bu durumu gerçekten iyi idare edebilir, her yönden aynı anda gerçekleşen birleşmeler için tasarlanmıştır. Tüm konuları doğru bir şekilde bir araya getirebileceğine güvenebilirsiniz. Şube b1
birleştirmek master
veya master
birleştirmek b1
, birleştirme taahhüdünün git ile aynı görünmesini umursamıyor . Tek fark, hangi şubenin bu birleştirme taahhüdüne işaret ettiği.
Sen geri döndün. SVN veya benzeri bir geçmişi olan insanlar bunu daha sezgisel bulurlar. Komutlar birleştirme durumuna benzer:
git checkout b1
git rebase master
# repeat for b2 and b3
İnsanlar bu yaklaşımı severler çünkü tüm dallarda doğrusal bir geçmişi vardır. Bununla birlikte, bu doğrusal tarih bir yalandır ve bunun farkında olmalısınız. Bu taahhüt grafiğini düşünün:
A --- B --- C --- D <-- master
\
\-- E --- F --- G <-- b1
Birleştirme gerçek tarihle sonuçlanır:
A --- B --- C --- D <-- master
\ \
\-- E --- F --- G +-- H <-- b1
Bununla birlikte, rebase size bu geçmişi verir:
A --- B --- C --- D <-- master
\
\-- E' --- F' --- G' <-- b1
Nokta kaydedilmesini yani, E'
, F'
, ve G'
gerçekten var olmamış ve muhtemelen çoğu henüz araştırılmamıştır. Derlemeyebilirler bile. Aslında, bir değişiklik, özellikle master
de gelişimdeki gelişmeler için önemli olduğunda, bir taban yoluyla saçma sapan taahhütler oluşturmak oldukça kolaydır b1
.
Bunun sonucu üç kaydedilmesini hangisinin ayırt edemez olabilir E
, F
ve G
aslında değerini azalan bir gerileme ortaya git bisect
.
Kullanmaman gerektiğini söylemiyorum git rebase
. Kullanımları vardır. Fakat ne zaman kullanırsanız kullanın, tarih hakkında yalan söylediğinin farkında olmanız gerekir. Ve en azından yeni taahhütleri test etmelisiniz.