Kopya kâğıdı

Git komutları: her gün kullanacağınız örneklerle kısa rehber

Güncellendi: · Skillaria.Top

Temel Git komutları şunlardır: depo oluşturmak için git init ve git clone, değişiklikleri kaydetmek için git status, git add ve git commit, branch işlemleri için git branch, git switch ve git merge, sunucuyla eşitleme için git push, git fetch ve git pull, geri almak için git restore, git reset ve git revert.

Aşağıda görevlere göre gruplanmış çalışma rehberi var: her komutun bir örneği ve kısa bir açıklaması bulunuyor. Terminalin yanında açık tutmak kolaydır: bir geliştiricinin Git ile bir günde yaptığı işlerin neredeyse tamamı bu tablolardaki 20–30 komuta sığar.

Komutları anlamlı okumak için üç alanı akılda tutun: çalışma dizini (diskteki dosyalar), index ya da staging area (bir sonraki commit'e girecekler) ve repository (.git klasöründeki commit geçmişi). Git komutlarının çoğu değişiklikleri bu üç alan arasında ya da yerel ile uzak depo arasında taşır.

Git yapılandırması

Bu komutlar kurulumdan sonra bir kez çalıştırılır. --global bayrağı ayarları ~/.gitconfig dosyasına yazar ve kullanıcının tüm repository'lerinde geçerli olur; bayrak yoksa ayar yalnızca mevcut repository'de geçerlidir.

KomutNe yapar
git config --global user.name "Ali Yılmaz"Commit yazarının adı
git config --global user.email "ali@example.com"Commit yazarının e-postası
git config --global init.defaultBranch mainYeni repository'lerde varsayılan branch adı
git config --global core.editor "code --wait"Commit mesajları için editör (burada VS Code)
git config --global pull.rebase falsegit pull'un varsayılan davranışı — birleştirme
git config --global core.autocrlf inputCommit sırasında CRLF'yi LF'ye çevirir (macOS/Linux; Windows'ta genellikle true)
git config --list --show-originTüm ayarları ve her birinin hangi dosyadan geldiğini gösterir
git config --global alias.st statusTakma ad: git status yerine git st
git --versionKurulu Git sürümü
git help commitKomutun tam yardımı (kısa olanı için git commit -h)

Repository oluşturma ve klonlama

KomutNe yapar
git initBulunulan klasörde boş bir repository (.git klasörü) oluşturur
git init my-projectmy-project klasörünü ve içinde repository'yi oluşturur
git clone https://github.com/user/repo.gitUzak repository'yi tüm geçmişiyle kopyalar
git clone git@github.com:user/repo.git appSSH ile app klasörüne klonlar
git clone --depth 1 URLSığ klon: yalnızca son commit, hızlı ve az yer
git clone -b develop URLKlonlar ve hemen develop branch'ine geçer

Temel döngü: status, add, commit

Günlük işin çekirdeği budur: neyin değiştiğine bakmak, gerekenleri indekse seçmek ve bir commit ile kaydetmek.

KomutNe yapar
git statusDurum: değiştirilmiş, indekslenmiş ve izlenmeyen dosyalar
git status -sKısa biçim: M — değiştirildi, A — eklendi, ?? — izlenmiyor
git add dosya.txtDosyayı indekse ekler
git add .Mevcut klasördeki ve alt klasörlerdeki tüm değişiklikleri ekler, silmeler dahil
git add -ATüm repository'deki değişiklikleri ekler
git add -pDeğişikliklerin parçalarını (hunk) tek tek seçtirir
git commit -m "Giriş formu ekle"Indeksten bir commit oluşturur ve mesaj yazar
git commit -am "Yazım hatasını düzelt"İzlenen tüm değiştirilmiş dosyaları indeksleyip commit eder; yeni dosyalar dahil edilmez
git commit --amendSon commit'i yeniden yazar: unutulan dosyayı ekler ya da mesajı düzeltir
git commit --amend --no-editSon commit'i mesajını değiştirmeden tamamlar
git rm dosya.txtDosyayı hem diskten hem indeksten siler
git rm --cached secret.envDosyayı diskte bırakarak izlemeyi durdurur
git mv eski.js yeni.jsDosyayı yeniden adlandırır ya da taşır

Tipik bir senaryo:

git status
git add src/login.js src/login.css
git diff --staged          # commit'e neyin gireceğini kontrol et
git commit -m "Giriş formu ekle"

Zaten sunucuya gönderilmiş bir commit'te --amend kullanmayın: yeni bir hash'li commit oluşturur ve meslektaşlarınızın geçmişleri ayrışır.

Geçmişe ve değişikliklere bakma

KomutNe yapar
git logMevcut branch'in commit geçmişi
git log --onelineHer commit tek satırda: kısa hash ve başlık
git log --oneline --graph --allTüm branch'lerin grafiği terminalde
git log -p dosya.txtDosyanın geçmişi, her commit'in farkıyla
git log --author="Ali" --since="2 weeks ago"Yazara ve tarihe göre filtre
git log -S "getUser"Bu metnin eklendiği ya da silindiği commit'ler
git log main..featurefeature'da olup main'de olmayan commit'ler
git diffÇalışma dizinindeki, henüz indekse eklenmemiş değişiklikler
git diff --stagedSon commit'e göre indekste bekleyen değişiklikler (eşanlamlısı --cached)
git diff main featureİki branch'in uçları arasındaki fark
git diff HEAD~3 -- src/Son üç commit'te src klasöründeki değişiklikler
git show a1b2c3dBelirli bir commit'in bilgileri ve farkı
git show HEAD:README.mdSon commit'teki dosya içeriği
git blame app.jsHer satırı en son kimin, hangi commit'te değiştirdiği
git shortlog -snYazarlara göre commit sayısı

Commit'lere referans vermenin yolları her yerde işe yarar: HEAD mevcut commit, HEAD~1 onun ebeveyni, HEAD~3 ilk ebeveynler üzerinden üç adım geri, HEAD^2 ise merge commit'inin ikinci ebeveyni.

Branch'ler: oluşturma, geçiş, silme

Git 2.23 ile branch işleri için git switch, dosya işleri için git restore geldi; bu ikisi aşırı yüklenmiş git checkout'u ayırdı. Eski biçimler hâlâ çalışır.

KomutNe yapar
git branchYerel branch'lerin listesi; mevcut olan * ile işaretlenir
git branch -aYerel ve uzak (izlenen) branch'ler
git branch -vvBranch'ler, son commit'leri ve upstream'e göre geride/önde olma durumu
git branch feature/loginBranch oluşturur, geçiş yapmaz
git switch feature/loginBranch'e geçer
git switch -c feature/loginBranch oluşturur ve geçer (git checkout -b karşılığı)
git switch -Bir önceki branch'e döner
git branch -m yeni-adMevcut branch'in adını değiştirir
git branch -d feature/loginBranch zaten birleştirilmişse siler
git branch -D feature/loginBirleştirilmemiş olsa bile zorla siler
git branch --mergedMevcut branch'e birleştirilmiş branch'ler — silinebilecekler

Birleştirme ve yeniden temellendirme

KomutNe yapar
git merge featurefeature'ı mevcut branch'e birleştirir (mümkünse fast-forward)
git merge --no-ff featureHer zaman bir merge commit'i oluşturur
git merge --squash featureBranch'in tüm değişikliklerini tek seferde indekse koyar; ardından git commit
git merge --abortÇakışmalı birleştirmeyi iptal eder ve başlangıç durumuna döner
git rebase mainMevcut branch'in commit'lerini main'in üstüne taşır
git rebase -i HEAD~4Son 4 commit'i etkileşimli olarak birleştirir (squash), yeniden adlandırır, sıralar veya siler
git rebase --continueÇakışma çözüldükten sonra devam eder
git rebase --abortRebase'i tamamen iptal eder
git cherry-pick a1b2c3dTek bir commit'i mevcut branch'e yeni bir commit olarak uygular

Birleştirmede çakışmayı çözmek neredeyse her zaman aynı adımlardan oluşur:

git merge feature
# CONFLICT (content): Merge conflict in app.js
git status                 # dosyalar "both modified" bölümünde
# app.js'i düzenle, <<<<<<< ======= >>>>>>> işaretlerini kaldır
git add app.js
git commit                 # Git hazır bir birleştirme mesajı önerir

Rebase'in temel kuralı: ortak branch'te zaten bulunan ve başkalarının üzerine iş kurduğu commit'leri rebase etmeyin.

Uzak depolarla çalışma

KomutNe yapar
git remote -vRemote'ları ve adreslerini listeler
git remote add origin git@github.com:user/repo.gitUzak repository'yi origin adıyla bağlar
git remote set-url origin YENI_URLRemote adresini değiştirir (örneğin HTTPS'ten SSH'ye)
git remote remove upstreamRemote'u kaldırır
git fetchYeni commit'leri ve branch'leri indirir, dosyalarınıza dokunmaz
git fetch --pruneAynısını yapar, ayrıca sunucuda silinmiş branch işaretlerini temizler
git pullgit fetch + upstream branch'in mevcut branch'e birleştirilmesi
git pull --rebasegit fetch + sizin commit'lerinizin yeni gelenlerin üstüne taşınması
git pushMevcut branch'in commit'lerini upstream'e gönderir
git push -u origin feature/loginBranch'i ilk kez gönderir ve upstream'i ayarlar
git push --force-with-leaseUzak branch'i yalnızca üzerinde sizin görmediğiniz yeni commit yoksa yeniden yazar
git push origin --delete feature/loginBranch'i sunucudan siler
git push --tagsYerel tüm etiketleri gönderir

git push --force yerine alışkanlık haline getirin: --force-with-lease. Bir meslektaşınız aynı branch'e yeni bir şey gönderdiyse komut üzerine yazmayı reddeder.

Değişiklikleri geri alma

Git'in en gergin kısmı budur. Komut seçmeden önce temel soruyu sorun: değişiklik henüz yalnızca dosyalarda mı, indekste mi, yerel bir commit'te mi, yoksa zaten yayımlanmış bir commit'te mi?

DurumKomut
Dosyadaki değişiklikleri geri almak (son commit'teki hâline döndürmek)git restore app.js
Dosyayı indeksten çıkarmak, değişikliklerini korumakgit restore --staged app.js
Dosyayı belirli bir commit'ten geri getirmekgit restore --source=a1b2c3d app.js
Son commit'i geri almak, değişiklikleri indekste tutmakgit reset --soft HEAD~1
Son commit'i geri almak, değişiklikleri dosyalarda tutmakgit reset HEAD~1 (varsayılan --mixed modu)
Son commit'i ve tüm değişikliklerini silmekgit reset --hard HEAD~1
Yayımlanmış bir commit'i yeni bir «ters» commit ile geri almakgit revert a1b2c3d
Merge commit'ini geri almakgit revert -m 1 <merge-hash>
Izlenmeyen dosyaların silineceklerini görmekgit clean -n
İzlenmeyen dosya ve klasörleri silmekgit clean -fd
Reset ya da rebase sonrası «kaybolmuş» commit'i bulmakgit reflog, sonra git reset --hard HEAD@{2}

git reset --hard ve git clean -f, commit edilmemiş değişiklikleri geri dönüşsüz siler: reflog yalnızca commit'leri tutar, çalışma dizinindeki düzenlemeleri değil. Bunları çalıştırmadan önce git stash yapın ya da en azından git status'a bakın.

Stash: yarım kalan işi bir kenara koymak

KomutNe yapar
git stashİzlenen dosyalardaki değişiklikleri saklar ve çalışma dizinini temizler
git stash push -u -m "yarım: form"İzlenmeyen dosyalarla birlikte, bir açıklamayla saklar
git stash listSaklanan kayıtların listesi: stash@{0}, stash@{1}…
git stash show -p stash@{0}Saklanan kaydın farkını gösterir
git stash popSon kaydı geri getirir ve listeden siler
git stash apply stash@{1}Kaydı geri getirir, listede bırakır
git stash drop stash@{1}Tek bir kaydı siler
git stash branch fix-formStash'in alındığı commit'ten yeni bir branch oluşturur ve kaydı uygular

Etiketler ve sürümler

KomutNe yapar
git tagEtiketlerin listesi
git tag -a v1.2.0 -m "Sürüm 1.2.0"Yazar, tarih ve mesajı olan açıklamalı etiket
git tag v1.2.0 a1b2c3dBelirli bir commit'e hafif etiket
git push origin v1.2.0Tek bir etiketi gönderir
git tag -d v1.2.0Etiketi yerelde siler
git push origin --delete v1.2.0Etiketi sunucudan siler
git describe --tagsEn yakın etiket ve ondan sonraki commit sayısı, örneğin v1.2.0-3-ga1b2c3d

İleri düzey komutlar

KomutNe yapar
git bisect start, git bisect bad, git bisect good v1.1.0Hatayı getiren commit'i ikili arama ile bulur; sonunda git bisect reset
git worktree add ../hotfix mainAynı repository'den, başka bir branch'li ikinci bir çalışma klasörü
git submodule update --init --recursiveKlonlamadan sonra alt modülleri indirir
git grep "TODO"İzlenen dosyalarda hızlı arama
git format-patch -1 HEAD / git apply fix.patchBir commit'i yama dosyasına kaydeder; yamayı çalışma dizinine uygular
git gcNesneleri paketler ve repository'yi temizler (genellikle Git bunu kendisi yapar)

Sık karşılaşılan hatalar ve çözümleri

Yeni branch yerine main'e commit yaptım

Commit henüz gönderilmediyse, mevcut commit'te bir branch oluşturun ve main'i geri alın:

git branch feature/login      # branch, sizin commit'inizi gösterir
git reset --hard HEAD~1       # main bir adım geri gider
git switch feature/login

Son commit'e bir dosyayı eklemeyi unuttum

git add unutulan.js
git commit --amend --no-edit

Push reddedildi: rejected, non-fast-forward

Sunucuda sizde olmayan commit'ler var. Önce onları alın, sonra gönderin:

git pull --rebase
git push

Yanlışlıkla parolaları içeren bir dosyayı commit ettim

Dosyayı izlemeden çıkarın ve .gitignore'a ekleyin: git rm --cached .env, sonra commit. Commit zaten yayımlandıysa, gizli bilgiyi ele geçmiş sayın ve yenisini üretin — geçmişten silinmiş olmaz.

Kısaca

Günlük iş için kısa bir küme yeter: status, add, commit, switch, merge, pull, push ve log --oneline. Geri alma komutlarını — restore, reset, revert — commit'in yayımlanıp yayımlanmadığına göre seçin; reflog'u son çare olarak akılda tutun. Bu rehberdeki tüm komutlar Git kursunda kendi deponuzda denenerek çalışılmaktadır.

Sık sorulan sorular

Yeni başlayan biri kaç Git komutu bilmeli?

Başlamak için 10–12 komut yeter: init, clone, status, add, commit, log, diff, branch, switch, merge, pull ve push. Diğerleri ihtiyaç doğdukça öğrenilir.

git switch ile git checkout arasındaki fark nedir?

git switch yalnızca branch değiştirir ve oluşturur; git checkout ise dosyaları da geri yükleyebilir. Ayrım, bir branch ile dosyayı karıştırıp değişiklikleri yanlışlıkla silmeyi önlemek için yapıldı.

Herhangi bir Git komutunun yardımına nasıl bakarım?

Tam kılavuz için git help komut, kısa bayrak listesi için git komut -h. Aynı belgeler git-scm.com'da da bulunur.

Uzun Git komutlarını kısaltabilir miyim?

Evet, takma adlarla: git config --global alias.lg "log --oneline --graph --all" yazdıktan sonra git lg kullanabilirsiniz.

Bu komutlar Windows'ta da çalışır mı?

Evet, komutlar tüm sistemlerde aynıdır. Windows'ta Git Bash, PowerShell ya da kod editörünün terminalinde çalıştırabilirsiniz.