Sobes.tech
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:

  1. Yeni bir özellik veya düzeltme, ayrı bir dalda (feature/..., fix/...) geliştirilir.
  2. 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.
  3. Geliştirme ve kod incelemesi tamamlandıktan sonra, özellik dalı no-ff (hızlı iletim olmayan) ile dev'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.
  4. dev'den düzenli olarak sürümler main (ü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.