🐙 Git ve GitHub CLI

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Yayınlanma Tarihi

31 Ağustos 2025

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 functionName geçen yerleri bul

git grep -n "TODO"

TODO içeren satırları satır numarasıyla göster (notları bulmak için faydalı)

git grep -i "login"

login kelimesini büyük/küçük harf duyarsız ara (Login, LOGIN, login eşleşir)

git init Boş bir Git reposu oluştur veya mevcut olanı yeniden başlat
git init my-project

my-project dizininde yeni repo başlat

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

new-feature adlı yeni bir dal oluştur

git branch -d old-feature

old-feature adlı yerel dalı sil

git checkout Dallar arasında geçiş yap veya başka bir commit’ten dosyaları geri yükle
git checkout main

main dalına geç

git checkout -b new-branch

new-branch adlı yeni dal oluştur ve geçiş yap

git switch Dallar arasında geçiş yap (checkout için basitleştirilmiş alternatif)
git switch main

main dalına geç

git switch -c feature-x

feature-x adlı yeni dal oluştur ve geç

git switch new-feature

new-feature adlı mevcut dala geç

git merge Başka bir dalın değişikliklerini geçerli dala birleştir
git merge new-feature

new-feature dalını geçerli dal ile birleştir

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 main dalının üzerine yeniden uygula

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

A (hariç) ile B (dahil) arasındaki commit aralığını uygula

📡 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

origin adında uzak repo ekle

git pull Uzak bir daldan değişiklikleri indir ve otomatik olarak birleştir
git pull origin main

Uzak main dalından değişiklikleri al ve geçerli dala birleştir

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 main dalını origin uzak deposuna gönder

git fetch Uzak repodan değişiklikleri indir ama birleştirme yapma
git fetch origin

origin’den tüm güncellemeleri indir ama henüz uygulama

git fetch origin main

Uzak repodan yalnızca main dalını indir

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ı (origin/main) zorla güncelle, çakışmaları üzerine yaz

📦 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"

v1.0 adlı açıklamalı etiket oluştur (tam Git nesnesi olarak kaydedilir, sürümler için iyi)

git tag -d v1.0

v1.0 adlı yerel etiketi sil (uzağı etkilemez)

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. v1.0) uzak repoya gönder

git push origin :refs/tags/v1.0

Uzak v1.0 etiketini sil (iki nokta üst üste sözdizimine dikkat edin)

🛠️ Ç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}

main dalının bir hafta önce nereye işaret ettiğini gör

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 pull çalıştırarak son commit’lere güncelle

git submodule sync --recursive

.gitmodules dosyasında değişiklikten sonra alt modül URL’lerini senkronize et

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ış .tar.gz arşivi oluştur

git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz

Projeyi .tar.gz arşivi olarak oluştur ve tüm dosyaları arşivde project/ klasörünün içine koy

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 (mytoken.txt) ile kimlik doğrulama

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

user kullanıcısına ait repo reposunu repo klasörüne klonla

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 (workspace/cli) klonla

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

monalisa fork’undaki feature dalından develop dalına PR oluştur

gh repo create CLI üzerinden yeni bir GitHub reposu oluştur
gh repo create my-project

GitHub’da my-project adlı yeni bir repo oluştur (etkileşimli sorular gelir)

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 upstream adında remote ekle

💡 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-branch performans sorunları olmadan hassas dosya/dizinleri geçmişten kaldır. Dikkatli kullanın

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