🐙 Git ve GitHub CLI
Sürüm kontrolü, dallanma, uzak repolar, stash, etiketler ve GitHub CLI için temel ve ileri düzey Git komutları.
🔹 Temel Komutlar
| Komut | Örnek | Açıklama | 
|---|---|---|
| git add | Bir dosyayı hazırlık alanına (staging area) ekle | |
| git add file.txt | Bir dosyayı bir sonraki commit için hazırla | |
| git add . | Geçerli dizindeki tüm değişiklikleri ve alt dizinleri hazırla | |
| git add -p | Dosyaların hangi kısımlarının hazırlanacağını etkileşimli seç (kısmi commitler için faydalı) | |
| git clone | Bir repoyu yeni bir dizine klonla | |
| git clone -b branch_name URL | Varsayılan yerine yalnızca belirtilen dalı klonla | |
| git clone --depth 1 URL | Yalnızca son commit’i klonla, zaman ve alan tasarrufu için shallow kopya oluştur | |
| git commit | Değişiklikleri repoya kaydet | |
| git commit -m "Initial commit" | Editör açmadan mesajla commit yap | |
| git commit -a -m "Fix bugs" | Tüm izlenen değişiklikleri hazırla ve mesajla commit yap | |
| git commit --amend | Son commit’i güncelle (mesajı değiştir veya daha fazla değişiklik ekle) | |
| git commit --fixup abc1234 | Daha sonra etkileşimli rebase sırasında otomatik squash için fixup commit oluştur | |
| git config | Repo veya global seçenekleri ayarla ve görüntüle | |
| git config --global user.name "Name" | Global Git kullanıcı adını ayarla | |
| git config --global user.email "email@example.com" | Global Git e-postasını ayarla | |
| git config --list | Tüm Git ayarlarını listele (ad, e-posta, editör, vb.) | |
| git diff | Commitler arasındaki değişiklikleri, commit ile çalışma dizini arasındaki farkları göster | |
| git diff HEAD | Son commit’ten beri yaptığın değişiklikleri göster (hazırlanmamış değişiklikler) | |
| git diff --staged | Bir sonraki commit’e dahil edilecek değişiklikleri göster | |
| git diff --word-diff HEAD~1 | Kelime düzeyinde farklılıklarla değişiklikleri göster | |
| git grep | Repo dosyaları içinde ara | |
| git grep "functionName" | Projede tüm dosyalarda  | |
| git grep -n "TODO" | 
 | |
| git grep -i "login" | 
 | |
| git init | Boş bir Git reposu oluştur veya mevcut olanı yeniden başlat | |
| git init my-project | 
 | |
| git init --bare | Bare (çıplak) repo başlat | |
| git log | Commit günlüklerini göster | |
| git log --oneline | Commit geçmişini kısa tek satır formatında göster | |
| git log --graph --all | Tüm dalları commit grafiğinde görsel olarak göster | |
| git log -p --stat | Commitler için patch ve dosya değişim istatistiklerini göster | |
| git reset | Dosyaları hazırlıktan çıkar, değişiklikleri çalışma dizininde tut | |
| git reset HEAD file.txt | Bir dosyayı hazırlıktan çıkar (düzenlemeler korunur) | |
| git reset --hard HEAD~1 | Bir commit geri git ve tüm değişiklikleri sil (geri dönüşsüz!) | |
| git reset --soft HEAD~1 | Son commit’i geri al ama değişiklikleri yeniden commit için hazır tut | |
| git reset --mixed HEAD~1 | Commit’i geri al ama değişiklikleri hazırlıksız olarak çalışma dizininde tut | |
| git show | Farklı Git nesnelerini göster | |
| git show <commit_hash> | Belirli bir commit’in değişikliklerini ve mesajını göster | |
| git show HEAD~1 | Geçerli commit’ten bir önceki commit’i göster | |
| git show --stat | Son commit’in dosya değişiklik özetini göster | |
| git status | Çalışma dizininin durumunu göster | |
| git status -s | Durumu kısa formatta göster | |
| git status -b | Geçerli dalı ve dosya durumlarını göster | 
🌿 Dallanma ve Birleştirme
| Komut | Örnek | Açıklama | 
|---|---|---|
| git branch | Dallar oluştur, listele veya sil | |
| git branch new-feature | 
 | |
| git branch -d old-feature | 
 | |
| git checkout | Dallar arasında geçiş yap veya başka bir commit’ten dosyaları geri yükle | |
| git checkout main | 
 | |
| git checkout -b new-branch | 
 | |
| git switch | Dallar arasında geçiş yap ( checkoutiçin basitleştirilmiş alternatif) | |
| git switch main | 
 | |
| git switch -c feature-x | 
 | |
| git switch new-feature | 
 | |
| git merge | Başka bir dalın değişikliklerini geçerli dala birleştir | |
| git merge new-feature | 
 | |
| git merge --no-ff new-feature | Her zaman merge commit oluştur (fast-forward mümkün olsa bile) | |
| git merge --abort | Çakışma durumunda merge işlemini iptal et ve değişiklikleri geri al | |
| git rebase | Commitleri yeni bir taban commit üzerine taşı veya yeniden uygula | |
| git rebase main | Dalındaki commitleri  | |
| git rebase -i HEAD~3 | Son 3 commit’i etkileşimli düzenle | |
| git rebase --abort | Devam eden bir rebase’i durdur ve geri al | |
| git rebase -i --autosquash HEAD~5 | Etkileşimli rebase sırasında fixup veya squash olarak işaretlenen commitleri otomatik squash yap | |
| git cherry-pick | Başka bir daldan belirli commitleri uygula | |
| git cherry-pick <hash> | Belirli bir commit’i (hash ile) geçerli dala uygula | |
| git cherry-pick --continue | Çakışmaları çözdükten sonra cherry-pick işlemine devam et | |
| git cherry-pick A^..B | 
 | 
📡 Uzak Repolar
| Komut | Örnek | Açıklama | 
|---|---|---|
| git remote | Uzak repolarla bağlantıları yönet (örn. GitHub) | |
| git remote -v | Uzak isimlerini ve URL’lerini göster | |
| git remote add origin URL | 
 | |
| git pull | Uzak bir daldan değişiklikleri indir ve otomatik olarak birleştir | |
| git pull origin main | Uzak  | |
| git pull --rebase origin main | Birleştirme yerine geçerli dalı uzak dalın üzerine rebase et | |
| git push | Yerel değişiklikleri uzak repoya yükle | |
| git push origin main | Yerel  | |
| git fetch | Uzak repodan değişiklikleri indir ama birleştirme yapma | |
| git fetch origin | 
 | |
| git fetch origin main | Uzak repodan yalnızca  | |
| git fetch --all | Tüm uzaklardan güncellemeleri indir | |
| git fetch --prune | Silinmiş dalları temizle — uzakta silinmiş dalların yerel referanslarını kaldır | |
| git fetch --dry-run | Aslında indirmeden hangi verilerin indirileceğini göster | |
| git fetch origin +main | Yerel izleme dalını ( | 
📦 Stash ve Temizlik
| Komut | Örnek | Açıklama | 
|---|---|---|
| git stash | Commitlenmemiş değişiklikleri geçici olarak kaydet (work in progress) | |
| git stash | Değiştirilmiş ve hazırlanmış dosyaları kaydet, ardından çalışma dizinini son commit’e döndür | |
| git stash apply | Son kaydedilen stash’i uygula (stash kaydedilmeye devam eder) | |
| git stash pop | Son stash’i uygula ve sil | |
| git stash list | Tüm stash listesini göster | |
| git stash branch feature-fix | Yeni bir dal oluştur ve son stash’i ona uygula | |
| git clean | Git tarafından takip edilmeyen dosyaları kalıcı olarak sil | |
| git clean -f | Geçerli dizindeki takip edilmeyen dosyaları sil | |
| git clean -fd | Takip edilmeyen dosya ve klasörleri sil | |
| git clean -n | Nelerin silineceğini önizle (güvenli dry run) | 
🏷️ Etiketler
| Komut | Örnek | Açıklama | 
|---|---|---|
| git tag | Belirli noktaları işaretlemek için etiketler oluştur, listele veya sil (örn. sürümler) | |
| git tag -a v1.0 -m "Version 1.0" | 
 | |
| git tag -d v1.0 | 
 | |
| git push | Commitleri, dalları ve etiketleri yerelden uzak repoya gönder | |
| git push origin --tags | Tüm yerel etiketleri uzak repoya gönder (birden fazla sürümü etiketledikten sonra faydalı) | |
| git push origin v1.0 | Belirli bir etiketi (örn.  | |
| git push origin :refs/tags/v1.0 | Uzak  | 
🛠️ Çakışma Çözümü
| Komut | Örnek | Açıklama | 
|---|---|---|
| git mergetool | Merge çakışmalarını çözmek için görsel bir araç aç | |
| git mergetool --tool=meld | Çakışmaları çözmek için belirli bir merge aracı (örn. Meld) kullan | |
| git rerere | Git’in geçmişte çözdüğün merge çakışmalarını hatırlamasını sağla | |
| git config --global rerere.enabled true | Geçmiş çakışma çözümlerinin otomatik yeniden kullanımını etkinleştir | |
| git rerere status | Çözümü kaydedilmiş dosyaları göster | |
| git rerere diff | Git’in gelecekte kullanmak için hangi değişiklikleri kaydettiğini göster | 
⚙️ İleri Düzey Komutlar
| Komut | Örnek | Açıklama | 
|---|---|---|
| git bisect | Bir hatayı hangi commit’in getirdiğini bulmak için ikili arama kullan | |
| git bisect start | İyi ve hatalı olduğu bilinen commitler arasında ikili arama başlat | |
| git bisect bad | Geçerli commit’i “hatalı” olarak işaretle (bug içeriyor) | |
| git bisect good <commit> | Bug bulunmayan bilinen bir commit’i “iyi” olarak işaretle | |
| git blame | Bir dosyanın her satırını en son kimin değiştirdiğini revizyon ve yazar ile göster | |
| git blame file.txt | Dosyadaki her satır için yazar ve commit bilgilerini göster | |
| git blame -L 10,20 file.txt | Yalnızca 10 ile 20. satırlar arasındaki blame bilgisini göster | |
| git blame --show-email file.txt | Satır değişiklikleriyle birlikte yazarların e-postalarını göster | |
| git reflog | Dalların hareketleri ve HEAD için referans günlüklerini (reflog) görüntüle ve yönet | |
| git reflog show main@{1.week.ago} | 
 | |
| git reflog expire --expire=30.days --dry-run | 30 günden eski reflog girdilerinin temizlenebileceğini önizle (değişiklik yapılmaz) | |
| git reflog delete HEAD@{2} | Belirli bir reflog girdisini sil (dikkatli kullanılmalı, kurtarma işlemini etkileyebilir) | |
| git submodule | Alt modüller ekle, başlat, güncelle veya incele (repo içinde repo) | |
| git submodule add URL path | Belirli bir yola harici bir repo alt modülü ekle | |
| git submodule update --init | Repoda listelenen tüm alt modülleri başlat ve indir | |
| git submodule foreach git pull | Her alt modül içinde  | |
| git submodule sync --recursive | 
 | |
| git submodule update --remote --merge | Alt modülleri uzak dallarındaki son commit’lere güncelle | |
| git archive | Belirli bir commit veya daldan dosyaların arşivini (zip, tar, vb.) oluştur | |
| git archive --format=zip HEAD > archive.zip | Geçerli projeyi HEAD’den ZIP arşivi olarak oluştur | |
| git archive -o release.tar.gz HEAD | Geçerli HEAD’den sıkıştırılmış  | |
| git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz | Projeyi  | |
| git gc | Gereksiz dosyaları temizle ve repoyu performans için optimize et | |
| git gc --aggressive | Ayrıntılı temizlik ve optimizasyon yap (yavaş olabilir ama etkilidir) | |
| git gc --prune=now | Ulaşılamayan tüm nesneleri hemen sil (emin değilsen tehlikeli) | |
| git shortlog | Yazarların ve commitlerinin hızlı özeti | |
| git shortlog -e | Yazarların e-posta adresleriyle listesini göster (kim ne kadar katkıda bulunmuş analiz için) | |
| git shortlog -s -n | Her yazarın kaç commit yaptığını göster, commit sayısına göre sırala | |
| git shortlog -sne | Yukarıdakine ek olarak ad ve e-posta adreslerini göster — ayrıntılı aktivite takibi için faydalı | |
| git revert | Önceki bir commit’teki değişiklikleri geri almak için yeni bir commit oluştur (tarihi yeniden yazmadan) | |
| git revert HEAD | Son commit’i yeni bir commit ile geri al | |
| git revert <commit_hash> | Belirli bir commit’i hash ile güvenli şekilde geri al (yeni commit ekleyerek) | 
🐙 GitHub CLI
gh, GitHub’u terminalden yönetmenizi sağlar.
| Komut | Örnek | Açıklama | 
|---|---|---|
| gh auth login | CLI komutlarının hesabınızla etkileşim kurabilmesi için bir GitHub hostuna kimlik doğrulaması yapın | |
| gh auth login --with-token < mytoken.txt | Bir dosyada saklanan kişisel erişim tokeni ( | |
| gh auth login --hostname enterprise.internal | GitHub Enterprise sunucusuna kimlik doğrulama (github.com değil) | |
| gh repo clone | Bir GitHub reposunu yerel makinenize klonlayın | |
| gh repo clone user/repo | 
 | |
| gh repo clone cli/cli -- --depth=1 | Yalnızca son commit’i indirerek daha hızlı ve küçük boyutlu klon oluştur | |
| gh repo clone cli/cli workspace/cli | Repoyu özel bir klasöre ( | |
| gh issue list | Bir GitHub reposundaki issue’ları listele, isteğe bağlı olarak filtre uygula | |
| gh issue list --assignee "@me" | Size atanmış issue’ları listele | |
| gh issue list --state all | Durumlarına bakılmaksızın (açık veya kapalı) tüm issue’ları listele | |
| gh issue list --search "error no:assignee sort:created-asc" | “error” eşleşen, atanmamış ve oluşturulma tarihine göre artan sıralı issue’ları listele | |
| gh pr create | CLI üzerinden GitHub’da pull request oluştur | |
| gh pr create --title "..." | Belirtilen başlık ile pull request oluştur | |
| gh pr create --project "Roadmap" | Pull request’i “Roadmap” adlı bir GitHub projesine bağla | |
| gh pr create --base develop --head monalisa:feature | 
 | |
| gh repo create | CLI üzerinden yeni bir GitHub reposu oluştur | |
| gh repo create my-project | GitHub’da  | |
| gh repo create my-project --public --clone | Açık (public) bir repo oluştur ve yerel olarak klonla | |
| gh repo create my-project --private --source=. --remote=upstream | Geçerli klasörden özel (private) uzak repo oluştur ve  | 
💡 Git Aliasları (Kullanışlı Kısayollar)
Sık kullanılan Git komutlarını hızlandırmak için pratik alias’lar ayarlayın:
git config --global alias.br branch                                       # kısayol: git branch
git config --global alias.ci commit                                       # kısayol: git commit
git config --global alias.co checkout                                     # kısayol: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # güzel geçmiş grafiği
git config --global alias.last "log -1 HEAD"                              # son commit’i göster
git config --global alias.st status                                       # kısayol: git status🚀 Profesyoneller için İleri Düzey Git Komutları
| Komut | Örnek | Açıklama | 
|---|---|---|
| git filter-repo | Git geçmişini yeniden yazarak dosyaları, yazarları veya yolları kaldırmak veya değiştirmek için güçlü ve hızlı bir araçtır; git filter-branchyerine daha güvenli ve hızlıdır | |
| git filter-repo --path secret.txt --invert-paths | 
 | |
| git filter-repo --replace-text replacements.txt | Tüm geçmişte dizgileri veya desenleri topluca değiştir (örn. kimlik bilgilerini temizle) | |
| git filter-repo --subdirectory-filter src | Bir alt dizin geçmişini commit metadatasını koruyarak yeni bir repoya çıkar | |
| git worktree | Bir repo ile ilişkili birden fazla çalışma dizini yönet; dallarda eşzamanlı çalışmaya imkan tanır, klon yapmaya gerek kalmaz | |
| git worktree add ../feature feature-branch | Aynı repoya bağlı ek bir çalışma dizini oluştur, dalları paralel kontrol et | |
| git worktree list | Tüm aktif worktree’leri, yolları ve dalları listele | |
| git worktree remove ../feature | Artık ihtiyaç duyulmayan worktree’yi kaldır ve güvenli şekilde temizle | |
| git replace | Mevcut nesnelerin yerine geçen geçici referanslar oluştur; yerel geçmiş manipülasyonu ve test için kullanılabilir | |
| git replace <old_commit> <new_commit> | Yerel repoda bir commit’i başka bir commit ile geçici olarak değiştir; test veya geçmişi yeniden yazmadan düzeltme için faydalıdır | |
| git replace --list | Tüm aktif replacement referanslarını göster | |
| git replace -d <replace_ref> | Belirli bir replacement referansını silerek davranışı geri döndür | |
| git stash | Commitlenmemiş değişiklikleri bir stack’e geçici olarak kaydet; tamamlanmamış işleri commit yapmadan bağlam değiştirmeye imkan tanır | |
| git stash push -p | Hangi değişikliklerin stash’e kaydedileceğini etkileşimli seç | |
| git stash push -m "WIP selective stash" | Kolay tanım için özel mesajla stash oluştur | |
| git stash apply stash@{2} | Stash listesinden belirli bir stash’i uygulayın, ancak silmeyin | |
| git rebase | Commitleri başka bir taban commit üzerine yeniden uygula; temiz, doğrusal bir proje geçmişi sağlar ve etkileşimli düzenleme imkanı sunar | |
| git rebase --interactive --autosquash | Fixup veya squash işaretli commitleri otomatik düzenleyip birleştiren etkileşimli rebase başlat | |
| git rebase -i --autosquash HEAD~10 | Commit geçmişini push etmeden önce fixup/squash commitleri birleştirerek temizle | |
| git commit --fixup <commit> | Etkileşimli rebase sırasında otomatik birleştirilmek üzere fixup commit oluştur | |
| git commit --squash <commit> | Bir squash commit oluştur ve rebase sırasında belirtilen commit ile birleştir | |
| git bisect | Bir bug’a neden olan commit’i verimli şekilde bulmak için ikili arama aracı; ardışık commitleri test ederek daraltır | |
| git bisect run | Her commit üzerinde belirli bir test scripti çalıştırarak hatalı commit’i otomatik bul | |
| git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh | Test scripti ile bisection sürecini otomatikleştirerek hata bulmayı hızlandır | |
| git bisect visualize | Bisection sürecini görselleştirmek için grafik aracı aç | |
| git bisect reset | Bisect modundan çık ve orijinal HEAD’e dön | |
| git commit | Amend, sign, fixup ve mesaj özelleştirme gibi detaylı seçeneklerle commit kaydet; proje geçmişinin kalitesini korur | |
| git commit --gpg-sign | Commit’inizin kimliğini ve yazarlığını kriptografik olarak doğrulamak için GPG anahtarınızla imzalı commit oluştur | |
| git commit -S -m "Signed commit" | Commit’leri GPG anahtarı ile imzala, bütünlük ve yazar doğrulamasını sağla | |
| git config --global user.signingkey <key_id> | Commit’leri imzalamak için kullanılan GPG anahtarını global olarak yapılandır | |
| git log --show-signature | Commit’lerin GPG imza bilgisini doğrula ve göster | |
| git reflog | HEAD ve dallara yapılan güncellemeleri kaydeder; kaybolan commitleri kurtarmak ve yerel geçmiş hareketlerini anlamak için kritik | |
| git reset --hard HEAD@{3} | Bir dalı önceki reflog durumuna resetleyerek değişiklikleri kurtar veya geri al | |
| git reflog expire --expire=now --all | Tüm reflog girdilerini hemen sil, geçmişi temizle (dikkatli kullanın) | 
🧰 Profesyonel Çalışma İpuçları ve Otomasyon
| Konu | Komutlar / Örnek | Açıklama & Pro İpuçları | 
|---|---|---|
| Agresif Repo Temizliği | git gc --aggressive --prune=now | Depoyu optimize etmek için derin çöp toplama yapar ve erişilemeyen nesneleri hemen siler. Bakım zamanlarında kullanın | 
| Paralel Dal Worktree’leri | git worktree add ../feature-branch feature | Eşzamanlı özellik geliştirmesi için birden fazla çalışma dizini tut; klon yükünü önler | 
| Temiz, Doğrusal Geçmiş | git rebase -i --autosquash | Push etmeden önce, geçmişi temiz ve okunabilir tutmak için autosquash ile etkileşimli rebase yapın | 
| Güvenli Commitler | git commit -S | Commit’leri GPG ile imzalayın; paylaşılan repolarda güvenilirliği artırır, birçok kurumsal ortamda zorunludur | 
| Otomatik Bisection | git bisect run ./test-script.sh | Bisect sırasında her commit üzerinde test scripti çalıştırarak hata avını otomatikleştirin | 
| Çakışma Çözüm Önbelleği | git config --global rerere.enabled true | Rebase veya merge sırasında tekrar eden çakışmaların daha hızlı çözümü için önceden çözümleri yeniden kullanmayı etkinleştirin | 
| Paylaşılan Alias ve Hook’lar | Ortak Git alias’larını ve commit hook’larını paylaşılan repo veya CI pipeline’da saklayarak takım standartlarını uygulayın ve verimliliği artırın | 
Ek Kaynaklar
🧠 İpucu
Her şeyi ezberlemeye çalışmayın. --help kullanın, keşfedin ve düzenli pratik yapın:
git help <command>
git status🌐 Faydalı Bağlantılar
📘 Resmi Git Dokümantasyonu — tüm Git komutları için detaylı kılavuz:
https://git-scm.com/docs
📙 Learn Git Branching — dallanma kavramlarını öğrenmek için etkileşimli görsel eğitim:
https://learngitbranching.js.org
📕 Pro Git Kitabı (ücretsiz, Scott Chacon & Ben Straub):
https://git-scm.com/book
📗 Git Cheatsheet (resmi kısa başvuru kılavuzu):
https://education.github.com/git-cheat-sheet-education.pdf