Feature Branch — Git'te, her yeni özelliğin ana koddan izole edilmiş ayrı bir dalda geliştirildiği bir dallanma tekniğidir. Bu, birden fazla geliştiricinin projenin kararlı sürümüne zarar verme riski olmadan farklı görevler üzerinde aynı anda çalışmasına olanak tanır. Atlassian, 2024'e göre, Feature Branch, Git Flow'un temel bir öğesidir ve çoğu ticari projede kullanılır.
Önemli Noktalar
feature/fonksiyon-adı.Feature Branch (özellik dalı), belirli bir işlevselliği geliştirmek için develop'dan oluşturulan geçici bir Git dalıdır. Uzun ömürlü main ve develop dallarının aksine, feature dalları sınırlı bir süre — birkaç saatten birkaç haftaya kadar — var olur.
feature branch'in temel amacı, bir görevle ilgili değişiklikleri kodun geri kalanından izole etmektir. Geliştirici kendi dalında deneyler yapabilir, birden çok commit yapabilir ve hatta kodu bozabilir, diğer ekip üyelerinin çalışmasını etkilemeden.
Geliştirme tamamlandıktan sonra, feature dalı zorunlu kod incelemesiyle birlikte bir Pull Request aracılığıyla develop'a geri birleştirilir. Birleştirmeden sonra, depoyu temiz tutmak için dal genellikle silinir.
Vincent Driessen, 2010'a göre, feature dalları ile Git Flow modeli, farklı dal türleri arasındaki net sorumluluk ayrımı sayesinde endüstri standardı haline gelmiştir.
İş akışı, geliştiricinin her yeni özellik için gerçekleştirdiği adımlar dizisinden oluşur. Bu süreç, birleştirme çakışmalarını en aza indirir ve kod kalite kontrolünü sağlar.
Develop ile düzenli senkronizasyon kritik öneme sahiptir. Bir feature dalı, develop'dan değişiklikleri birleştirmeden ne kadar uzun yaşarsa, nihai birleştirmede çakışma olasılığı o kadar yüksek olur.
| Senkronizasyon Sıklığı | Çakışma Riski | Geliştirme Kolaylığı |
|---|---|---|
| Günlük | Düşük | Sık rebase veya merge gerektirir |
| Haftalık | Orta | Rahat tempo, orta düzey çakışmalar |
| Aylık | Yüksek | Karmaşık çakışma çözümü riski |
| Asla | Kritik | Veri kaybı olmadan birleştirme imkansız olabilir |
Dal adlandırma, ekip disiplininin önemli bir parçasıdır. Tek tip bir adlandırma standardı, hangi görev üzerinde çalışıldığını ve kimin yaptığını hızlıca belirlemeye olanak tanır.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.JIRA, Trello veya başka bir sistemden görev ID'si kullanmak en iyi uygulamadır. Kodu otomatik olarak göreve bağlar ve git log aracılığıyla dal aramasını basitleştirir.
Pull Request (veya GitLab'da Merge Request), feature dalını develop'a birleştirme isteğidir. PR yalnızca teknik bir işlem değil, kod kalitesini artıran ve ekip içinde bilgiyi yayan bir ekip kod inceleme sürecidir.
İyi bir PR, görevin kısa bir açıklamasını içeren bir başlık, bilet bağlantısı ve değişikliklerin açıklamasını içerir. Geliştirici, tam olarak ne yapıldığını, hangi dosyaların değiştirildiğini ve projenin diğer bölümleri için potansiyel riskler olup olmadığını belirtmelidir.
Ekip, PR'daki kodu inceler, yorum bırakır, değişiklik talep eder (change requests) ve birleştirmeyi onaylar (approve). Onaydan sonra, merge veya squash merge gerçekleştirilir.
Mobil geliştirmede ortalama PR inceleme süresi 4 ila 24 saat arasındadır. Danger kütüphanesi, doğrudan PR içinde linters ve testler çalıştırarak kontrollerin bir kısmını otomatikleştirir.
PR onayından sonra, feature dalı develop'a farklı şekillerde birleştirilebilir. Birleştirme stratejisi seçimi, commit geçmişini ve değişiklikleri geri alma yeteneğini etkiler.
Sık sürüm yapan mobil projeler için en çok squash merge kullanılır: develop'ta temiz bir geçmiş sağlar, geliştirme detayları ise PR açıklamasında ve izleyici görevinde kalır.
Deneyimli geliştiriciler bile feature dallarıyla çalışırken hatalar yapar. Tipik sorunları bilmek, zaman ve veri kaybını önlemeye yardımcı olur.
Bu sorunları önlemenin en iyi yolu, proje başlangıcında çalışma kuralları üzerinde anlaşmak ve CI/CD hattında otomatik kontroller kullanmaktır.
Pratik bir senaryo düşünelim: bir geliştirici, mobil uygulamada yeni bir kimlik doğrulama özelliği başlatır. Bir feature dalı oluşturur, kod üzerinde çalışır ve görevi bir Pull Request ile tamamlar.
# Develop'ı güncelle ve feature dalı oluştur
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# Özellik üzerinde çalışma: commit'ler
git add src/ui/login/
git commit -m "Add login screen layout"
# Feature dalını sunucuya gönder
git push origin feature/add-login-screen
# Develop ile senkronize et (rebase)
git fetch origin develop
git rebase origin/develop
# PR onayından sonra: yerel develop'ı güncelle ve dalı sil
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
git branch -d komutu, dalı yalnızca değişiklikleri tamamen birleştirildikten sonra siler. Dal birleştirilmemişse, Git zorla silmek için git branch -D kullanmayı önerecektir — bu bayrağı dikkatli kullanın.
PR oluşturmadan önce her feature dalı için CI/CD hattı çalıştırılmalıdır. Bu, kod diğer geliştiricilerin incelemesine girmeden önce sorunların erken aşamada tespit edilmesini sağlar.
# Feature dalını kontrol etmek için GitHub Actions
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
Hat, kodun derlendiğini, testlerin geçtiğini ve kod stilinin ekip standartlarını karşıladığını doğrular. Tüm kontrolleri geçtikten sonra bir Pull Request oluşturulabilir.
Sıkça Sorulan Sorular
Evet, bu standart bir uygulamadır. Her geliştirici kendi feature dalında çalışabilir ve hepsi develop ile bağımsız olarak senkronize olur. Ana kural, kodda çapraz görev bağımlılıklarını önlemek için görev başına bir daldır.
Feature dalınızda git rebase origin/develop komutunu çalıştırın. Çakışmalar oluşursa, bunları tek tek çözün — commit'ler develop'ın en son durumunun üzerine yeniden yazılacaktır. Rebase'den sonra, uzak dalı güncellemek için git push --force gerekli olacaktır.
Görev iptal edildiyse, feature dalını silmeniz yeterlidir. Yerel dal için git branch -d feature/ad ve uzak dal için git push origin --delete feature/ad komutlarını kullanın. Commitlenmemiş tüm değişiklikler kaybolacaktır.
Özünde aynı şeydir. Farklı ekipler farklı önekler kullanır: feature/, task/, feat/. Git mekaniğinde bir fark yoktur — hepsi izole geliştirme için develop'dan oluşturulmuş geçici dallardır.
Evet, bu zorunlu bir uygulamadır. Birleştirme sonrası dallar referans listesini kirletir ve karışıklığa neden olabilir. Çoğu platform (GitHub, GitLab), PR birleştirmesinden hemen sonra dalı silmeyi önerir ve yerel dallar git branch -d komutuyla silinir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun