🐙 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 (checkout iç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-branch yerine 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