Middle
Şirketinizde sürüm kontrol sisteminde dalların birleştirilmesi (merge) veya geçmişin yeniden yazılması (rebase) nasıl gerçekleşir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Takımımızda, Git tabanlı bir iş akışını benimseriz. Değişiklikleri entegre etmek için iki ana yaklaşım kullanıyoruz: merge ve rebase, duruma ve dalın türüne göre seçim yapıyoruz.
Merge:
- Genellikle uzun ömürlü dalları birleştirmek için kullanılır, örneğin dev ile main, veya özellik dallarını dev'e entegre etmek için.
- Diğer dallardan gelen değişikliklerin ne zaman birleştirildiğini açıkça gösteren birleştirme commit'i oluşturur.
- Tüm commit geçmişini, tüm dallanma noktalarını dahil olmak üzere korur.
git checkout dev // Hedef dala geçiş yaparız
git merge feature/yeni-ozellik // Özellik dalını birleştiririz
Rebase:
- Özellik dallarında temiz ve doğrusal bir commit geçmişi korumak için kullanılır, genellikle dev'e entegre edilene kadar.
- Mevcut dalın commit'lerini hedef dalın en üstüne taşır, böylece tarihi "yeniden yazar".
- Her küçük özellik veya düzeltme için merge commit'lerini önleyerek tarihi basitleştirir.
- Önemli: Diğer geliştiricilerin çalıştığı halka açık dallarda rebase yapmayın, çünkü bu değişiklikleri pull ederken çatışmalara neden olabilir.
git checkout feature/yeni-ozellik // Özellik dalına geçiş
git rebase dev // Özellik dalındaki commit'leri dev'in en üstüne taşır
// Gerekirse çatışmaları çözün
git push --force-with-lease // Rebase sonrası güvenli bir push için --force-with-lease kullanın
Standart iş akışımız:
- Yeni bir özellik veya düzeltme, ayrı bir dalda (feature/..., fix/...) geliştirilir.
- Geliştirme tamamlandıktan ve kod incelemesi yapıldıktan sonra, özellik dalı düzenli olarak dev'e rebase edilir. Bu, erken aşamada çatışmaları çözmeye yardımcı olur.
- Geliştirme ve kod incelemesi tamamlandıktan sonra, özellik dalı
no-ff(hızlı iletim olmayan) iledev'e birleştirilir, böylece birleştirme bilgisi korunur. Veya çok küçük özellikler veya düzeltmeler için,dev'e merge edilmeden önce tek bir commit'e squash yapılır. dev'den düzenli olarak sürümlermain(üretim dalı) olarak yapılır, her zaman merge ile.
Bu şekilde, commit geçmişinin korunması (merge) ile temiz bir geliştirme dalının sürdürülmesi (rebase) arasında denge kurarız.