Git Versiyon Kontrol Rehberi: Kod Yonetimi
Git versiyon kontrol sistemini kullanarak kod degisikliklerinizi guvenle yonetin ve ekibinizle isbirligi yapin.
Git Nedir ve Neden Kullanilir?
Git, Linus Torvalds tarafindan 2005 yilinda Linux cekirdegi gelistirmesi icin olusturulan dagitik versiyon kontrol sistemidir. Kod tabanindaki her degisikligi izler, birden fazla gelistiricinin ayni projede es zamanli calismasina olanak tanir ve projenin herhangi bir onceki durumuna geri donmenizi saglar.
2026 yilinda Git, yazilim gelistirmenin vazgecilmez bir aracidir. Bireysel projelerden kurumsal olcekteki uygulamalara kadar hemen her yazilim projesinde kullanilir. Bu rehberde, Git'in temellerinden ileri duzey tekniklere kadar kapsamli bir bakis sunacagiz.
Git Temel Kavramlari
Git ile etkili calisabilmek icin asagidaki temel kavramlari anlamak gerekir:
- Repository (Depo): Projenizin tum dosyalarini ve degisiklik gecmisini barinndiran yapidir.
git initile yerel bir depo olusturulur. - Commit: Belirli bir andaki degisikliklerin kalici kaydiidir. Her commit benzersiz bir SHA-1 hash'ine sahiptir ve onceki commit'e referans verir.
- Branch (Dal): Ana kod tabanından bagimsiz bir gelistirme hatti olusturur. Yeni ozellikler veya hata duzeltmeleri icin dallar kullanilir.
- Working Directory: Aktif calisma alaniniz; dosyalarin mevcut durumu.
- Staging Area (Index): Bir sonraki commit'e dahil edilecek degisikliklerin hazirlandigi ara alan.
git addile dosyalar buraya eklenir. - Remote: Uzak sunucudaki depo. GitHub, GitLab veya Bitbucket gibi platformlarda barindirirlir.
- HEAD: Su an uzerinde bulundugunuz commit'i gosteren bir isaretci (pointer).
Temel Git Komutlari
Gunluk gelistirme is akisinda en sik kullanacaginiz Git komutlari sunlardir:
| Komut | Aciklama |
|---|---|
git init | Yeni bir Git deposu olusturur |
git clone <url> | Uzak depoyu yerel makinenize kopyalar |
git status | Calismma dizininin ve staging area'nin durumunu gosterir |
git add <dosya> | Degisiklikleri staging area'ya ekler |
git commit -m "mesaj" | Staging area'daki degisiklikleri kaydeder |
git push | Yerel commit'leri uzak depoya gonderir |
git pull | Uzak depodaki degisiklikleri ceker ve birlestirir |
git log | Commit gecmisini gosterir |
git diff | Degisiklikleri karsilastirir |
git stash | Kaydedilmemis degisiklikleri gecici olarak saklar |
Dallanma (Branching) Stratejileri
Git'in en guclu ozelliklerinden biri, dallanmanin cok hafif ve hizli olmasidir. Etkili bir dallanma stratejisi, ekip is birligini duzenler ve kod kalitesini arttirir.
- Feature Branch: Her yeni ozellik icin ayri bir dal olusturulur.
git checkout -b feature/kullanici-paneli. Ozellik tamamlandiginda ana dala birlestirilir. - Bugfix Branch: Hata duzeltmeleri icin ayri dallar.
git checkout -b fix/giris-hatasi. - Release Branch: Surum hazirliklari icin.
release/v2.1.0. Son testler ve kucuk duzeltmeler burada yapilir. - Hotfix Branch: Uretim ortamindaki acil duzeltmeler icin. Dogrudan ana daldan ayrilir ve hem ana dala hem de gelistirme dalina birlestirilir.
Dal isimlendirmesinde tutarli bir konvansiyon kullanin: feature/, fix/, hotfix/, release/ on ekleri, dallin amacini hizlica anlamanizi saglar.
Birlestirme (Merge) ve Yeniden Temellendirme (Rebase)
Iki dali birlestirmenin iki temel yontemi vardir:
Merge
git merge feature/yeni-ozellikkomutu, iki dalin gecmisini bir "merge commit" ile birlestirir. Tum gecmis korunur ve dallanma yapisi gorsel olarak takip edilebilir. Ekip calismalarinda genellikle tercih edilen yontemdir.
- Fast-forward merge: Hedef dal, kaynak dalin gerisindeyse ve arada fark yoksa, isaretci ileri tasinir. Ekstra commit olusturmaz.
- Three-way merge: Her iki dalda da degisiklik varsa, Git ortak ataa commit'i kullanarak uclu birlestirme yapar ve bir merge commit olusturur.
- Squash merge:
git merge --squashile kaynak daldaki tum commit'ler tek bir commit olarak birlestirilir. Gecmis temiz kalir.
Rebase
git rebase mainkomutu, mevcut dalin commit'lerini hedef dalin ucune tasir. Lineer bir gecmis olusturur; dallanma gorulmez. Rebase, bireysel calismalarda gecmisi temiz tutmak icin kullanilir ancak paylasilmis dallarda dikkatli kullanilmalidir.
Altin kural: Baskalarinin uzerinde calistigi, paylasilmis dallarda rebase yapmayin. Rebase, commit gecmisini yeniden yazar ve bu durum diger gelistiricilerin calismasini bozabilir. Yalnizca kendi yerel dallarinizda kullanin.
Catisma Cozumu (Conflict Resolution)
Merge veya rebase sirasinda ayni dosyanin ayni satirlarinda farkli degisiklikler yapilmissa, Git bir catisma (conflict) olusturur. Catisma isaretleri su sekilde gorunur:
<<<<<<< HEAD ile mevcut dalinizddaki degerler, ======= ayirici, >>>>>>> feature/dal-adi ile gelen daldaki degerler gosterilir. Catismayi cozmek icin dogru icerigi secin, isaretleri kaldirin ve dosyayi kaydedin.
- Kucuk ve sik merge yapin: Buyuk degisiklikler biriktiginde catisma riski artar.
- Iletisim kurun: Ayni dosya uzerinde calisacaksaniz ekibinizi bilgilendirin.
- Merge araci kullanin: VS Code, IntelliJ IDEA gibi editörlerin yerlesik merge araclari catisma cozumunu kolaylastirir.
- Catismadan sonra test edin: Catismayi cozdukten sonra kodun dogru calistigindan emin olun.
GitHub Flow
GitHub Flow, basit ve etkili bir dallanma modelidir. Surekli dagitim (continuous deployment) yapan ekipler icin idealdir:
- Main dalini her zaman dagitilabilir tutun. Main dali uretim ortamindaki kodu temsil eder.
- Yeni calisma icin aciklayici isimde bir dal olusturun.
feature/sepet-sistemi,fix/odeme-hatasigibi. - Duzzenli olarak commit atin ve push edin. Kucuk ve odakli commit'ler tercih edin.
- Pull Request (PR) acin. Degisikliklerinizi incelenmek uzere sunun. Aciklayici bir baslik ve detayli aciklama yazin.
- Kod incelemesi (Code Review) yapin. En az bir ekip uyesi degisiklikleri incelesin. Geri bildirim alin ve gerekli duzeltmeleri yapin.
- Testlerin gectiginden emin olun. CI pipeline'inda tum testler basarili olmalidir.
- Main dala birlestirin ve dagitim yapin. Onaylanan PR, main dala merge edilir ve otomatik olarak dagitilir.
Conventional Commits
Conventional Commits, commit mesajlari icin standart bir format tanimlar. Otomatik surum numaralama, degisiklik gunlugu olusturma ve CI/CD entegrasyonunu kolaylastirir.
Commit mesaji formati: tip(kapsam): aciklama
| Tip | Aciklama | Ornek |
|---|---|---|
| feat | Yeni ozellik | feat(auth): Google ile giris eklendi |
| fix | Hata duzeltme | fix(cart): toplam hesaplama hatasi duzeltildi |
| docs | Dokumantasyon degisikligi | docs: API kullanim rehberi eklendi |
| style | Kod formatlama, bosluk vb. | style: Prettier ile kod formatlandi |
| refactor | Kod yeniden yapilandirma | refactor(api): istek katmanini ayristirma |
| test | Test ekleme veya guncelleme | test(auth): login testleri eklendi |
| chore | Yapi, bagimlillik islemleri | chore: eslint yapilandirmasi guncellendi |
| perf | Performans iyilestirmesi | perf(images): lazy loading eklendi |
Breaking change iceren commit'ler icin govde veya alt bilgide BREAKING CHANGE: etiketi kullanin veya tip sonrasina unlem isareti ekleyin: feat!: kimlik dogrulama sistemi degistirildi.
Faydali Git Teknikleri
- git stash: Uzerinde calistiginiz degisiklikleri gecici olarak saklayarak baska bir dala gecmenizi saglar.
git stash popile geri yuklenir. - git cherry-pick: Belirli bir commit'i baska bir dala uygular. Secici birlestirme icin kullanilir.
- git bisect: Bir hatayi tanitan commit'i bulmak icin ikili arama yapar. Buyuk gecmislerde hata ayiklamayi hizlandirir.
- git blame: Bir dosyanin her satirini en son kimin degistirdigini gosterir.
- git reflog: HEAD'in tum hareketlerini kaydeder. Yanlislikla silinen commit'leri kurtarmak icin kullanilir.
- .gitignore: Git tarafindan izlenmemesi gereken dosya ve klasorleri belirtir. Node_modules, .env, build ciktilari gibi dosyalar buraya eklenir.
Sonuc:Git, modern yazilim gelistirmenin temel tasidir. Temel komutlari ogrenmek baslangic icin yeterlidir, ancak dallanma stratejileri, catisma cozumu ve conventional commits gibi ileri konulari da ustlenmek sizi daha etkili bir gelistirici yapar. Git'i gunluk is akisinizin dogal bir parcasi haline getirdiginizde, ekip is birligi ve kod kalitesi gozle gorulur sekilde artar.