İçindekiler
Git ilk öğrenildiğinde korkutucu gelir. Bunun sebebi komutların çokluğu değil, arka plandaki modelin bir kez bile anlatılmamasıdır. O yüzden önce modeli, sonra komutları anlatacağım.
Üç alan
Git'te bir dosya değişikliği üç yerden geçer:
- Çalışma dizini: Dosyaları düzenlediğiniz yer.
- Hazırlık alanı (staging, index): "Bir sonraki commit'e şunlar girecek" dediğiniz ara bölge.
- Depo (repository): Commit edilmiş, kalıcı geçmiş.
git add bir değişikliği 1'den 2'ye, git commit ise 2'den 3'e taşır. Bu modeli kafanıza yerleştirdiğinizde komutların çoğu kendiliğinden anlam kazanır.
Günlük akış
Güne başlarken
git switch main
git pull --rebase
git switch -c ozellik/fatura-pdf
Ana dalı güncelleyin, sonra yaptığınız işe özel yeni bir dal açın. Doğrudan main üzerinde çalışmayın. Bir şey ters giderse dalı silip baştan başlamak, main'i düzeltmeye çalışmaktan çok daha kolaydır.
Çalışırken
git status
git diff
git add -p
git commit -m "Fatura PDF'ine vergi numarası eklendi"
git add -p en az bilinen ama en değerli komuttur. Değişiklikleri parça parça gösterir ve her biri için "bu commit'e girsin mi?" diye sorar. Böylece unutulmuş bir var_dump ya da deneme satırı commit'e sızmaz.
İyi commit mesajı neyi değil, neden değiştirdiğinizi söyler. "Düzeltme" yerine "Boş sepette ödeme butonu gizlendi" yazın. Altı ay sonra geçmişi okuyan kişi büyük ihtimalle siz olacaksınız.
Paylaşırken
git fetch origin
git rebase origin/main
git push -u origin ozellik/fatura-pdf
Push etmeden önce dalınızı güncel main'in üstüne taşımak, birleştirme sırasında çıkacak çakışmaları sizin makinenizde çözmenizi sağlar.
Hata yaptığınızda
Son commit mesajını düzeltmek (henüz push etmediyseniz):
git commit --amend -m "Doğru mesaj"
Bir dosyadaki kaydedilmemiş değişikliği çöpe atmak:
git restore dosya.php
Hazırlık alanına yanlışlıkla eklediğiniz dosyayı geri çıkarmak:
git restore --staged dosya.php
Push edilmiş bir commit'i geri almak:
git revert a1b2c3d
revert geçmişi silmez; o commit'i tersine çeviren yeni bir commit oluşturur. Paylaşılmış dallarda tek güvenli yol budur. git reset --hard ve push --force paylaşılmış bir dalda başkalarının çalışmasını silebilir.
"Her şeyi kaybettim" paniği:
git reflog
Reflog, HEAD'in son zamanlarda gittiği her yeri kaydeder. Yanlışlıkla silinen bir dal ya da geri alınan bir commit, çoğu zaman buradan kurtarılabilir. Git'te bir şeyi gerçekten kaybetmek sanıldığından çok daha zordur.
Yarım işi kenara koymak
Acil bir hatayı düzeltmeniz gerekti ama elinizde bitmemiş bir iş var:
git stash push -m "yarım kalan rapor ekranı"
git switch main
# ... acil düzeltme ...
git switch ozellik/rapor
git stash pop
.gitignore'u ilk gün yazın
vendor/, node_modules/, .env, log dosyaları ve IDE ayarları depoya girmemeli. Özellikle .env: şifreleri bir kez commit ettiyseniz, sonradan silmeniz yeterli değildir; geçmişte durmaya devam eder. O şifreleri değiştirmeniz gerekir.
Kısa özet
Gündelik işin büyük kısmı şu komutlarla döner: status, diff, add -p, commit, switch, pull --rebase, fetch, rebase, push, restore, revert, stash ve acil durumlar için reflog. Gerisini ihtiyaç duydukça öğrenirsiniz.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.