Git Alias ile Kısa Komut Tanımlama ve Verimlilik
Günlük iş akışında Git komutlarını kaç kez yazdığınızı düşünün: git status, git log --oneline --graph --decorate, git checkout -b feature/yeni-ozellik… Bunları her gün onlarca kez yazıyorsunuz. Parmak yorgunluğu mu dediniz? Haklısınız. Git alias sistemi tam bu noktada devreye giriyor ve iş akışınızı ciddi ölçüde hızlandırıyor.
Ben bu sistemi ilk öğrendiğimde “neden daha önce kullanmadım” diye kendime kızmıştım. Şimdi alias’sız çalışmayı düşünemiyorum bile. Bu yazıda sizi sıfırdan alıp gerçekten işe yarar bir alias seti kurmaya kadar götüreceğim.
Git Alias Nedir ve Nerede Saklanır?
Git alias, uzun komutlara verdiğiniz kısa takma adlardır. Tanımladığınız alias’lar iki yerde saklanabilir:
Global yapılandırma (~/.gitconfig): Tüm projelerinizde geçerli olur. Genellikle tercih edilen yöntem bu.
Yerel yapılandırma (.git/config): Sadece o repoda geçerli olur. Projeye özgü iş akışları için kullanışlı.
Sistem yapılandırması (/etc/gitconfig): Makinedeki tüm kullanıcılar için geçerli. Şirket ortamlarında standart alias seti dağıtmak için kullanılır.
Alias tanımlamanın iki yolu var. Komut satırından veya doğrudan config dosyasını düzenleyerek.
# Komut satırından tanımlama
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
# Yapılandırma dosyasını doğrudan açıp düzenleme
git config --global --edit
Ben genellikle ikinci yöntemi tercih ederim. Bir seferde toplu düzenleme yapabiliyorsunuz ve ne tanımladığınızı görmek çok daha kolay.
Temel Alias’lar: Herkeste Olması Gerekenler
~/.gitconfig dosyanızı açtığınızda [alias] bölümüne şunları eklemenizi tavsiye ederim:
[alias]
st = status
co = checkout
br = branch
ci = commit
df = diff
lg = log --oneline --graph --decorate --all
undo = reset HEAD~1 --mixed
unstage = reset HEAD --
Şimdi bunları tek tek açıklayayım:
st: git status yerine git st. Günde 50 kez yazıyorsanız bu bile önemli.
co: git checkout yerine git co. Branch geçişlerinde hayat kurtarıyor.
br: git branch yerine git br. Branch listesine bakmak çok daha hızlı.
ci: git commit yerine git ci. Klasik bir kısaltma.
df: git diff yerine git df. Değişikliklere bakarken anında.
lg: Bu bence en değerli olanı. git log --oneline --graph --decorate --all yazmak yerine git lg yazıyorsunuz ve dal ağacınızı görsel olarak görebiliyorsunuz.
undo: Son commit’i geri alır ama değişiklikleri staged’e bırakmaz. Commit mesajını yanlış yazdığınızda can kurtarıcı.
unstage: Yanlışlıkla stage’e aldığınız dosyayı geri çekmek için.
Daha Güçlü Log Alias’ları
Log görüntüleme konusunda birkaç farklı alias tanımlamak mantıklı. Farklı durumlar için farklı formatlara ihtiyaç duyuyorsunuz:
[alias]
# Kısa ve öz commit geçmişi
lol = log --oneline --graph --decorate
# Yazar bilgisiyle birlikte
ll = log --pretty=format:"%C(yellow)%h%Creset %C(blue)%an%Creset %C(green)%ar%Creset %s" --graph
# Sadece benim commitlerimi göster
mylog = log --author="$(git config user.name)" --oneline
# Son 10 commit
last = log -10 --oneline
# Belirli bir dosyanın geçmişi için hazır şablon
filelog = log --follow --stat
ll alias’ını özellikle seviyorum çünkü renkli çıktıyla kim ne zaman ne yapmış anında görüyorsunuz. Ekip ortamında çalışırken kim hangi değişikliği yapmış bakmak çok sık gerçekleşen bir eylem.
# Kullanım örnekleri
git lol # Dal ağacı görünümü
git ll # Renkli ve detaylı
git mylog # Sadece benim commitlerimi
git last # Son 10 commit
git filelog -- src/api.js # Belirli dosyanın geçmişi
Shell Komutu Çalıştıran Alias’lar
Git alias’larının güçlü taraflarından biri, önüne ! koyarak shell komutu çalıştırabilmeniz. Bu özellik alias’ları gerçek anlamda güçlü yapıyor.
[alias]
# Tüm branch'leri sil (merged olanları)
cleanup = "!git branch --merged | grep -v '\*\|main\|master\|develop' | xargs -n 1 git branch -d"
# Stash'leri listele
sl = stash list
# Hızlı stash
ss = stash save
# Uzak repodaki değişiklikleri çek ve rebase et
up = "!git fetch origin && git rebase origin/main"
# Tüm uzak branch bilgilerini güncelle
aliases = "!git config --get-regexp alias | sed 's/alias\.//'"
cleanup alias’ı gerçek bir hayat kurtarıcı. Uzun süren projelerde onlarca merged branch birikir ve bunları tek tek silmek hem vakit alır hem de can sıkar. Bu komutla bir anda temizleyebiliyorsunuz. Tabii main, master ve develop gibi korumalı branch’leri silmemesi için filtrelemeyi doğru yapmak kritik.
aliases alias’ı da ilginç: Tanımladığınız tüm alias’ları listeler. Unuttunuz mu? git aliases yazın, hepsi karşınıza gelir.
Gerçek Dünya Senaryosu: Ekip Ortamında Standart Alias Seti
Bir projede 8 kişilik bir backend ekibiyle çalışıyorduk. Herkesin farklı alias’ları vardı, bazılarının hiç yoktu. Kod review süreçlerinde “şu komutu çalıştır” dediğimizde kim ne yapacağını şaşırıyordu.
Çözüm olarak şirket genelinde kullanılacak bir temel alias seti belirledik ve bunu onboarding sürecine dahil ettik. İşte o setten bir kesit:
[alias]
# Günlük iş akışı
st = status -sb
co = checkout
cob = checkout -b
br = branch -vv
ci = commit
ca = commit --amend
can = commit --amend --no-edit
# Push/Pull
ps = push
pl = pull --rebase
pso = push origin
# Diff
df = diff
dc = diff --cached
dw = diff --word-diff
# Log
lg = log --oneline --graph --decorate --all
ll = log --pretty=format:"%C(yellow)%h%Creset %C(blue)%an%Creset %C(green)%ar%Creset %s"
# Yardımcı
undo = reset HEAD~1 --mixed
unstage = reset HEAD --
wip = "!git add -A && git commit -m 'WIP'"
Buradaki birkaç alias’ı özellikle açmak istiyorum:
cob: git checkout -b için. Yeni branch oluşturmak artık git cob feature/login-page kadar kısa.
ca: git commit --amend. Son commit’e bir şey eklemek veya mesajı düzeltmek için.
can: git commit --amend --no-edit. Commit mesajını değiştirmeden son commit’e dosya eklemek için. Çok pratik.
dc: git diff --cached. Stage’e aldığınız ama henüz commit etmediğiniz değişiklikleri gösterir. df ile karıştırmamak için ayrı bir alias.
dw: Word bazında diff. Satır bazında değil kelime bazında değişiklik gösterir. Dokümantasyon veya uzun metin içeren dosyalarda çok daha okunabilir çıktı verir.
wip: Bir şeyi yarım bırakıp başka şeye geçmeniz gerektiğinde tüm değişiklikleri “WIP” mesajıyla commit eder. Geçici ama pratik.
Parametreli Gibi Davranan Alias’lar
Git alias’ları doğrudan parametre alamaz ama shell trick’leriyle bunu aşabilirsiniz:
[alias]
# Belirli bir branch'i checkout et ve upstream'i takip et
cot = "!f() { git checkout --track origin/$1; }; f"
# Commit ve push tek komutta
cap = "!f() { git commit -am "$1" && git push; }; f"
# Yeni feature branch oluştur
feature = "!f() { git checkout -b feature/$1; }; f"
# Branch'i sil (local ve remote)
nuke = "!f() { git branch -d $1 && git push origin --delete $1; }; f"
Kullanımı şöyle:
# feature/user-auth branch'ı oluştur
git feature user-auth
# Commit ve push
git cap "Login sayfası tamamlandı"
# Branch'i hem local hem remote'dan sil
git nuke feature/eski-ozellik
# Remote branch'i takip ederek checkout
git cot staging
cap alias’ı özellikle küçük projelerde veya kişisel repolarda çok işe yarıyor. Hızlıca bir şeyi commit edip push etmeniz gerektiğinde tek komut yeterli. Ama dikkat: bu alias -am kullandığı için untracked dosyaları eklemez, sadece tracked dosyalardaki değişiklikleri commit eder.
Global .gitconfig Örneği: Tam Haliyle
Tüm bunları bir araya getiren gerçekçi bir yapılandırma dosyası:
[user]
name = Ahmet Yilmaz
email = [email protected]
[core]
editor = vim
autocrlf = input
[alias]
# Temel komutlar
st = status -sb
co = checkout
cob = checkout -b
br = branch -vv
ci = commit
ca = commit --amend
can = commit --amend --no-edit
df = diff
dc = diff --cached
dw = diff --word-diff
# Log görüntüleme
lg = log --oneline --graph --decorate --all
ll = log --pretty=format:"%C(yellow)%h%Creset %C(blue)%an%Creset %C(green)%ar%Creset %s" --graph
last = log -10 --oneline
mylog = "!git log --author="$(git config user.name)" --oneline"
# Uzak repo
ps = push
pl = pull --rebase
pso = push origin
pf = push --force-with-lease
# Geri alma işlemleri
undo = reset HEAD~1 --mixed
unstage = reset HEAD --
discard = checkout --
# Stash
ss = stash save
sl = stash list
sp = stash pop
# Shell komutları kullananlar
cleanup = "!git branch --merged | grep -v '\*\|main\|master\|develop' | xargs -n 1 git branch -d"
wip = "!git add -A && git commit -m 'WIP'"
aliases = "!git config --get-regexp alias | sed 's/alias\.//'"
cap = "!f() { git commit -am "$1" && git push; }; f"
feature = "!f() { git checkout -b feature/$1; }; f"
[push]
default = current
[pull]
rebase = true
[color]
ui = auto
pf alias’ına dikkat edin: push --force-with-lease. Normal push -f yerine bunu kullanmak çok daha güvenli. Eğer başkası o sırada push etmişse komut başarısız olur, değişikliklerini ezmemiş olursunuz. Rebase sonrası force push gerektiğinde her zaman --force-with-lease kullanın.
discard alias’ı da çok işe yarıyor. git checkout -- dosya.txt yazmak yerine git discard dosya.txt ile değişikliği geri alıyorsunuz.
Windows Ortamında Dikkat Edilmesi Gerekenler
Windows’ta Git Bash veya PowerShell üzerinden Git kullanıyorsanız bazı alias’lar farklı davranabilir. Shell komutları kullanan ! prefix’li alias’lar özellikle sorun çıkarabilir.
[alias]
# Windows için güvenli versiyon
cleanup = "!git branch --merged | findstr /v "* main master develop" | xargs -n 1 git branch -d"
Ancak en güvenli yaklaşım Windows’ta da Git Bash kullanmak. PowerShell tercihini anlıyorum ama Git alias’larındaki shell komutları için Bash çok daha uyumlu.
Bir diğer Windows spesifik sorun: Alias içindeki tırnak işaretleri. " yerine farklı escape sequence gerekebilir. Eğer alias çalışmıyorsa önce tırnak işaretlerini gözden geçirin.
Alias Kullanımını Takip Etmek
Hangi alias’ları gerçekten kullanıyorsunuz, hangilerini tanımladınız ama hiç yazmadınız? Bunu anlamanın yolu shell history’nize bakmak:
# En çok kullandığınız git komutları
history | grep git | awk '{print $2, $3}' | sort | uniq -c | sort -rn | head -20
# Sadece alias kısaltmalarına bakmak için
history | grep "git " | awk '{print $2}' | sort | uniq -c | sort -rn | head -20
Bu çıktıya bakarak hangi uzun komutları sık kullandığınızı görüp onlara alias tanımlayabilirsiniz. Ben bunu yılda bir kez yaparım ve alias setimi güncellerim.
Alias’ları Ekip Genelinde Paylaşmak
Şirket içinde standart bir alias seti dağıtmanın birkaç yolu var:
Birincisi, bir script yazıp tüm ekibe dağıtmak:
#!/bin/bash
# git-setup.sh - Ekip için standart Git yapılandırması
echo "Git alias'ları yapılandırılıyor..."
git config --global alias.st "status -sb"
git config --global alias.co "checkout"
git config --global alias.cob "checkout -b"
git config --global alias.br "branch -vv"
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.ll "log --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(green)%ar%Creset %s' --graph"
git config --global alias.undo "reset HEAD~1 --mixed"
git config --global alias.unstage "reset HEAD --"
git config --global alias.cleanup "!git branch --merged | grep -v '\*\|main\|master\|develop' | xargs -n 1 git branch -d"
echo "Tamamlandı! 'git aliases' ile kontrol edebilirsiniz."
Ekipteki herkes bu scripti çalıştırıyor ve aynı temel alias setine sahip oluyor. Onboarding sürecine ekleyince yeni gelen birisinin ilk gün git lg yazabilmesi sağlanıyor.
İkinci yöntem, şirketin iç wiki’sine veya confluence’ına bir sayfa açmak ve standart .gitconfig içeriğini orada tutmak. Yeni gelenler o sayfaya bakıp yapılandırmayı kopyalıyor.
Alias’ların Sınırları ve Dikkat Edilecekler
Alias kullanırken birkaç önemli noktaya dikkat etmek gerekiyor:
Varolan Git komutlarını ezmeyin. Örneğin git push yerine ps tanımlamak sorun yaratmaz ama git push için push alias’ı tanımlamanın bir anlamı yok. Daha da önemlisi, merge gibi varolan komutlara farklı davranış eklemek istiyorsanız çok dikkatli olun.
Shell alias’larıyla karışıklık. Bash veya Zsh’ta da kendi alias’larınız olabilir. alias gc="git commit" gibi shell alias’ları ile Git alias’ları çakışabilir. Hangisinin önce geldiğini bilmek önemli.
Alias adlarını akılda kalıcı tutun. x1, q2 gibi anlamlı olmayan isimler verirseniz iki gün sonra ne olduğunu unutursunuz. Kısaltmalar mantıklı olmalı: co checkout için, br branch için, ci commit için.
Ekipte herkesin bilmediği alias’ları dokümanlara yazmayın. Readme’de git cob feature/abc yazarsanız ve ekibin yarısı bu alias’ı tanımlamamışsa karışıklık çıkar.
Sonuç
Git alias sistemi, gerçekten kullanmaya başladığınızda iş akışınızı ne kadar değiştirdiğini fark ediyorsunuz. Sadece zaman kazanmakla kalmıyor, zihinsel yük de azalıyor. git log --oneline --graph --decorate --all yazmak için düşünmek zorunda kalmak yerine git lg yazıp geçiyorsunuz.
Başlamak için çok karmaşık bir alias seti oluşturmanıza gerek yok. Bugün şu beş alias’ı tanımlayın: st, co, br, lg ve undo. Bir hafta bunları kullanın, neye ihtiyacınız olduğunu görün ve alias setinizi zamanla genişletin.
En değerli alias’lar sizin en sık kullandığınız ve en uzun olan komutlar için olanlardır. O yüzden shell history’nize bakın, hangi Git komutlarını en çok yazıyorsunuz listeleyin ve oradan başlayın. Bir süre sonra alias’sız çalışmak size garip gelmeye başlayacak, bu garantili.
