ViraStack
  • Akademi
  • Hakkında
  • Destek
Genel BakışKaynaklarKatkı
ViraStack

Frontend geliştiricileri için DX odaklı araç seti: starter’lar, ajan kuralları, form hook’ları ve rehber.

Ürünler

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Keşfet

  • Akademi
  • Hakkında
  • Marka
  • Destek

© 2026 ViraStack.

Açık kaynak · MIT

Web Temelleri

07 / 07

Git

Commit, branch ve uzak depo ile sürüm kontrolü.

Git Nedir

Version control (sürüm kontrolü), dosyalardaki değişiklikleri zaman içinde kaydeden bir sistemdir. Bir dosyayı ya da tüm projeyi eski bir hâline döndürebilir, neyin ne zaman ve kim tarafından değiştirildiğini görebilirsiniz.1

Git, en yaygın sürüm kontrol sistemidir ve dağıtıktır: her geliştiricinin bilgisayarında projenin ve tüm geçmişinin tam bir kopyası bulunur. Bu yüzden commit atmak için internete bağlı olmanız gerekmez.21

GitHub ise Git değildir. Git depolarını (repository, kısaca repo) barındıran ve üstüne pull request, code review gibi ekip araçları ekleyen bir servistir. GitLab ve Bitbucket aynı işi yapar.2

Kurulum ve İlk Ayar

macOS ve Linux'ta Git çoğu zaman kuruludur; terminalde git --version ile kontrol edin. Kurduktan sonra ilk iş adınızı ve e-postanızı tanımlayın. Her commit bu bilgiyi taşır ve sonradan değiştirilemez:3

git config --global user.name "Ömer Gülçiçek"
git config --global user.email iletisim@omergulcicek.com
git config --global init.defaultBranch main

Son satır, yeni açtığınız projelerde ana branch'in adını main yapar. GitHub ve diğer servisler main kullanır; Git de 3.0 sürümünde varsayılanı master'dan main'e çekecek.34

Temel Akış

Git'te bir dosya üç durumdan birindedir:5

DurumAnlamı
ModifiedDosyayı değiştirdiniz ama henüz kaydetmediniz
StagedDeğişikliği bir sonraki commit'e girmek üzere işaretlediniz
CommittedDeğişiklik Git'in veritabanına güvenle kaydedildi

Yani akış hep aynıdır: dosyayı değiştirirsiniz, commit'e girecek değişiklikleri git add ile staging area'ya eklersiniz, sonra git commit ile o anın fotoğrafını çekersiniz.52

KomutNe yapar
git initBulunduğunuz klasörde yeni bir repo başlatır
git clone <url>Uzaktaki bir repoyu tüm geçmişiyle bilgisayarınıza indirir
git statusHangi dosyaların değiştiğini ve hangilerinin staged olduğunu gösterir
git diffHenüz staged olmayan değişiklikleri satır satır gösterir
git add index.htmlDosyayı staging area'ya ekler (git add . hepsini)
git commit -m "Add cart button"Staged değişiklikleri geçmişe kaydeder
git log --onelineCommit geçmişini kısa listeler

İpucu

Ne yapacağınızdan emin değilseniz önce git status çalıştırın. Çıktısı çoğu zaman bir sonraki komutu da önerir.

.gitignore

Repoya girmemesi gereken dosyaları kökteki .gitignore dosyasına yazarsınız. Frontend projelerinde bunlar genelde node_modules, build çıktıları (dist, .next) ve .env gibi gizli bilgi taşıyan dosyalardır.6

node_modules
dist
.env

Uyarı

Zaten commit edilmiş bir dosyayı .gitignore'a yazmak onu repodan çıkarmaz. Önce git rm --cached .env ile takipten çıkarın. Şifre ya da API anahtarı bir kez push edildiyse, anahtarı da değiştirin.6

Branch

Branch, ana koddan ayrılıp kendi değişikliklerinizi yaptığınız bağımsız bir çalışma hattıdır. main bozulmadan yeni bir özelliği deneyebilirsiniz.

git switch -c add-to-cart-button   # yeni branch aç ve ona geç
git switch main                    # main'e geri dön
git branch                         # yereldeki branch'leri listele

git switch -c, branch'i oluşturup ona geçer.7 Eski kaynaklarda aynı iş için git checkout -b görürsünüz; ikisi de çalışır.8

git checkout eskiden hem branch değiştirmek hem de dosyalardaki değişiklikleri geri almak için kullanılıyordu. Aynı komutun iki farklı iş yapması kafa karıştırdığı için Git 2.23 (2019) bu işleri ikiye ayırdı: branch geçişi için git switch, dosya geri almak için git restore.20 git checkout hâlâ çalışır, ama branch değiştirirken git switch daha güvenlidir: yalnızca branch'lerle ilgilenir, yanlışlıkla dosyalarınızdaki değişiklikleri silmez.7

İşYeni komutEski karşılığı
Branch'e geçmekgit switch maingit checkout main
Branch açıp geçmekgit switch -c add-to-cart-buttongit checkout -b add-to-cart-button
Dosyadaki değişikliği geri almakgit restore index.htmlgit checkout -- index.html

İşiniz bitince branch'i main'e merge edersiniz:

git switch main
git merge add-to-cart-button

main siz ayrıldığınızdan beri değişmediyse Git yalnızca işaretçiyi ileri alır (fast-forward). İki taraf da ilerlediyse iki ucu ve ortak atalarını birleştiren yeni bir merge commit oluşturur.8

Uzak Depo

Bilgisayarınızdaki repo local, GitHub'daki remote'tur. Varsayılan remote'un adı origin'dir.2

KomutNe yapar
git pullRemote'taki yeni commit'leri indirip bulunduğunuz branch'e ekler
git pushYerel commit'lerinizi remote'a gönderir
git push -u origin add-to-cart-buttonYeni bir branch'i ilk kez gönderir ve remote'taki karşılığına bağlar

Commit yerel bir işlemdir; git push yapana kadar ekip arkadaşlarınız değişikliğinizi görmez.2

İş Hayatında Git

Ekipte günlük akış

Çoğu ekip GitHub flow'a benzer bir akışla çalışır:910

  1. main'i güncelleyin: git switch main ve git pull.

  2. İş için yeni bir branch açın.

  3. Küçük commit'ler atın ve branch'i push edin.

  4. Bir pull request açın; ekip arkadaşlarınız kodu inceler (bkz. Kod ve Ekip).

  5. Yorumları yeni commit'lerle düzeltin. Push ettikçe PR kendiliğinden güncellenir.

  6. Onay gelince PR'ı merge edin ve branch'i silin.

Bu düzende main'e doğrudan commit atılmaz; her şey PR ile girer. Böylece main her zaman çalışan kodu taşır.10

Branch'e isim vermek

İyi bir branch adı, ekibin listeye bakıp kimin ne üzerinde çalıştığını anlamasını sağlar: kısa ama açıklayıcı.9 Jira kullanan ekiplerde ad genelde ticket numarasıyla başlar, çünkü Jira branch adındaki numarayı görüp branch'i, commit'leri ve PR'ı ticket'ın altında gösterir:11

git switch -c feature/PROJ-123-add-to-cart-button
git switch -c bugfix/PROJ-456-price-rounding

Yaygın kalıp tür/TICKET-NUMARASI-kisa-aciklama'dır. Tür ön ekleri genelde feature/, bugfix/, hotfix/ ve release/ olur.12 Branch adlarını İngilizce, küçük harf ve tireyle yazın; Türkçe karakter ve boşluk kullanmayın. Ekibinizin belirlediği bir kural varsa o geçerlidir.

Bir iş, bir branch

Birbiriyle ilgisi olmayan işler aynı branch'e girmemeli. GitHub'ın önerisi de bu: her ilgisiz değişiklik grubu için ayrı branch.9

  • İnceleme kolaylaşır. Tek bir işi anlatan PR daha hızlı ve dikkatli okunur.

  • Biri diğerini bekletmez. İki iş aynı branch'teyse, birinde çıkan sorun diğerinin de yayına çıkmasını engeller.9

  • Conflict azalır. Küçük ve kısa ömürlü branch'ler daha az değişiklik taşır, main'e geri dönmeleri kolaydır.13

İşi yaparken başka bir hata fark ederseniz onu aynı branch'te düzeltmek yerine yeni bir ticket ve branch açın. Tek istisna, işinizi doğrudan engelleyen küçük düzeltmelerdir; onları da PR açıklamasında belirtin.

Commit mesajı

Commit mesajı, birkaç ay sonra "bu satır neden böyle?" diye soran kişiye yazılır. Chris Beams'in yaygın kabul gören kuralları kısaca şunlar:14

  • Başlık 50 karakteri geçmesin ve nokta ile bitmesin.

  • Başlığı İngilizce ve emir kipiyle yazın: "Fix add to cart button", "Fixed add to cart button" değil.

  • Gerekirse bir boş satırdan sonra neyi ve neden değiştirdiğinizi açıklayın.

Jira kullanan ekiplerde ticket numarası commit mesajına da eklenir: PROJ-123 Fix add to cart button.11

Conflict çıkınca

Merge conflict, iki branch aynı dosyanın aynı satırlarını farklı şekilde değiştirdiğinde ya da biri bir dosyayı silip diğeri değiştirdiğinde çıkar. Git hangisinin doğru olduğuna karar veremez ve merge'i durdurur.15 Ekipte en sık şöyle görürsünüz: siz kendi branch'inizde çalışırken bir arkadaşınızın PR'ı main'e girer ve sizin PR'ınız "conflict" uyarısı verir.

Çözmek için güncel main'i kendi branch'inize alın:

git switch main
git pull
git switch feature/PROJ-123-add-to-cart-button
git merge main

Conflict varsa Git hangi dosyalarda olduğunu söyler; git status bunları Unmerged paths altında listeler.8 Dosyayı açtığınızda iki versiyonu işaretlerle yan yana görürsünüz:815

<<<<<<< HEAD
<button class="btn-primary">Sepete ekle</button>
=======
<button class="btn btn-lg">Sepete Ekle</button>
>>>>>>> main

HEAD ile ======= arası sizin branch'inizdeki, ======= ile >>>>>>> arası gelen branch'teki hâlidir. Sonra:16

  1. Hangisinin kalacağına karar verin. Çoğu zaman doğru cevap ikisini birleştirmektir.

  2. Üç işaret satırını silin.

  3. Projeyi çalıştırıp test edin.

  4. git add <dosya> ile çözüldü olarak işaretleyin.

  5. git commit ile merge'i tamamlayın ve git push edin.

VS Code gibi editörler conflict'li dosyada "Accept Current", "Accept Incoming" ve "Accept Both" butonları gösterir; aynı işi tıklayarak yaparsınız.

Yap

  • Karşı taraftaki kodu siz yazmadıysanız, karar vermeden önce yazan kişiye sorun.

  • İşler karışırsa git merge --abort ile merge'ü iptal edip başladığınız hâle dönün.15

  • main'i branch'inize sık alın. Sık birleştirmek merge sayısını artırır ama her birini küçültür ve riskini azaltır.13

Yapma

  • Conflict'i "benimki kalsın" diyerek karşı tarafın değişikliğini okumadan silmeyin.

  • İşaret satırlarını (<<<<<<<, =======, >>>>>>>) dosyada bırakıp commit etmeyin.

Bazı ekipler git merge main yerine git rebase main kullanır. Sonuç benzerdir ama geçmişi yeniden yazar; ekibinizin hangisini tercih ettiğini sorun.

Detaylı Öğrenmek İçin

  • Pratik: Learn Git Branching; branch, merge ve rebase'i tarayıcıda görsel olarak deneyerek öğretir.17

  • Kitap: Pro Git, Git'in resmi ve ücretsiz kitabı. İlk üç bölüm günlük kullanım için yeterli.1

  • Git'in içi: Mary Rose Cook'un Git'in commit'leri ve branch'leri nasıl bir graf olarak sakladığını anlattığı yazısı ve konuşması.18

  • Konuşma: Pro Git'in yazarı Scott Chacon'ın az bilinen Git özelliklerini anlattığı FOSDEM 2024 konuşması (50 dk). Temelleri oturttuktan sonra izleyin.19

Kaynaklar

  • 1DokümanPro Git: About Version Control

    Sürüm kontrolünün tanımı, yerel, merkezi ve dağıtık sistemler; her kopyanın tam yedek olması.

  • 2DokümanGitHub Docs: About Git

    Git ile GitHub farkı, dağıtık sürüm kontrolü; `clone`, `pull`, `add`, `commit`, `push` akışı.

  • 3DokümanPro Git: First-Time Git Setup

    `user.name`, `user.email` ve `init.defaultBranch` ayarları.

  • 4DokümanGit: Breaking Changes

    Git 3.0'da yeni repolarda varsayılan branch adının `main` olacağı; sürümün henüz tarihi yok.

  • 5DokümanPro Git: What is Git?

    Modified, staged ve committed durumları; working tree, staging area ve Git klasörü.

  • 6DokümanGitHub Docs: Ignoring files

    `.gitignore`, takip edilen dosyanın `git rm --cached` ile çıkarılması ve hazır şablonlar.

  • 7DokümanGit: git-switch

    `git switch` ve `-c` ile branch oluşturup geçmek.

  • 8DokümanPro Git: Basic Branching and Merging

    Branch açmak, fast-forward ve merge commit, conflict işaretleri, `Unmerged paths` ve `git add` ile çözmek.

  • 9DokümanGitHub Docs: GitHub flow

    Branch, commit, PR, review, merge ve branch'i silme adımları; kısa açıklayıcı branch adları ve ilgisiz işler için ayrı branch.

  • 10MakaleAtlassian: Feature Branch Workflow

    Her özelliğin kendi branch'inde geliştirilmesi ve `main`'in bozuk kod taşımaması.

  • 11DokümanAtlassian: Reference work items in your development work

    Jira anahtarını branch adına, commit mesajına ve PR başlığına yazarak Jira'ya bağlamak.

  • 12DokümanBitbucket: Configure a project's branching model

    `feature/`, `bugfix/`, `hotfix/` ve `release/` ön ekleri.

  • 13MakaleMartin Fowler

    : — Feature branch, entegrasyon sıklığı; küçük ve sık entegrasyonun conflict'leri azaltması.

  • 14MakaleChris Beams

    : — İyi commit mesajının yedi kuralı ve emir kipi testi.

  • 15MakaleAtlassian: Git merge conflicts

    Conflict'in ne zaman çıktığı, işaretler, `git status`, `git merge --abort`.

  • 16DokümanGitHub Docs: Resolving a merge conflict using the command line

    Conflict'i terminalde adım adım çözmek: düzenle, `git add`, `git commit`.

  • 17DokümanLearn Git Branching

    Tarayıcıda çalışan, görsel ve interaktif Git alıştırmaları.

  • 18MakaleMary Rose Cook

    : — Git'in commit, branch ve HEAD'i bir graf olarak nasıl tuttuğu; da var.

  • 19VideoScott Chacon

    : — 50 dakika. Az bilinen Git ayarları ve komutları; deneyimli kullanıcılar için.

  • 20MakaleGitHub Blog: Highlights from Git 2.23

    `git checkout`'un işlerinin deneysel `git switch` ve `git restore` komutlarına bölünmesi (Ağustos 2019).

Bu sayfayı düzenle

Son güncelleme tarihi: 17 Ekim 2026

Önceki adım06. JavaScript