01 Mayıs 2026

Git: Commit Yönetimi ve Rebase Rehberi

Git: Commit Yönetimi ve Rebase Rehberi

Bu rehber, staged değişiklikleri koruma, commit sırasını değiştirme ve squash işlemlerini kapsamaktadır.


1. Staged Değişiklikleri Kaybetmeden Yedekleme

Patch dosyasına export et (en güvenli)

git diff --staged > my-changes.patch

Staged hali bozulmadan kalır. Sonradan uygulamak için:

git apply --index my-changes.patch

--index flag'i değişiklikleri unstaged değil, yeniden staged olarak uygular.

Sadece staged değişiklikleri stash'le

git stash push --staged --message "backup"
# geri almak için:
git stash pop

2. Staged Değişiklikleri Hem Yeni Branch'e Taşı Hem Burada Bırak

# 1. Sigorta al
git diff --staged > backup.patch

# 2. Yeni branch'e geç (staged değişiklikler seninle gelir)
git checkout -b feat/yeni-branch

# 3. Commit'le
git commit -m "feat: ..."

# 4. Eski branch'e dön
git checkout -

# 5. Staged olarak geri yükle
git apply --index backup.patch

3. Değişiklikleri Atmak

# Sadece unstage et (dosyayı değiştirmez)
git restore --staged .

# Tüm değişiklikleri at (staged + unstaged) — GERİ ALINAMAZ
git restore .

# Tek dosya için
git restore --staged path/to/file
git restore path/to/file

⚠️ git restore . kalıcıdır. Önce patch al.


4. Rebase'de "Accept All Current" Ne Anlama Gelir?

Rebase sırasında Current/Incoming rolleri normal merge'in tersidir:

Normal MergeRebase
Current (ours)Senin branch'inHedef branch (main)
Incoming (theirs)Gelen branchSenin commit'lerin

Özet: Rebase'de kendi değişikliklerini korumak istiyorsan → Accept All Incoming seç.


5. Interactive Rebase: Commit Sırasını Değiştirme ve Squash

VS Code'u git editörü yap

git config --global core.editor "code --wait"

Bu ayar olmadan terminal editörü (vi/vim) açılır.

Rebase başlat

git rebase -i <düzenlemek-istediğin-en-eski-committen-önceki-hash>

Örnek — son 3 commit'i düzenlemek için 4. commit'in hash'ini kullan:

git log --oneline -5
# output:
# abc1234 fix: lint
# def5678 cypress tests
# ghi9012 fix: coderabbit
# jkl3456  ← bu parent, bunu kullan
git rebase -i jkl3456

Editörde yapılacaklar

VS Code'da açılan dosyada commitler eskiden yeniye sıralanır:

pick ghi9012 fix: coderabbit
pick def5678 cypress tests
pick abc1234 fix: lint

Commit öne almak

Satırı kes, üstteki satırın üstüne yapıştır:

pick ghi9012 fix: coderabbit    ← öne alındı
pick def5678 cypress tests
pick abc1234 fix: lint

İki commit'i birleştirmek (squash)

pick → squash (veya kısaca s) yap. Squash, o commit'i bir öncekiyle birleştirir:

pick ghi9012 fix: coderabbit
pick def5678 cypress tests
squash abc1234 fix: lint        ← def5678 ile birleşir

Kaydet ve sekmeyi kapat (Cmd+W). Squash mesajı için ikinci bir editör açılır — istediğin mesajı bırak, diğerlerini sil.

Conflict çıkarsa

# Conflict'leri çöz, sonra:
git add .
git rebase --continue

# Vazgeçmek istersen:
git rebase --abort

6. Rebase Sonrası Push

Rebase commit hash'leri değiştirdiği için normal push reddedilir:

# Güvenli force push (başkası push etmediyse çalışır)
git push --force-with-lease

# Asla kullanma — başkasının değişikliğini ezer:
# git push --force

--force-with-lease remote'da beklenmedik bir commit varsa push'u reddeder, böylece takım arkadaşının çalışmasını korur.


Özet Akışı

1. git log --oneline          → commit hash'lerini gör
2. git rebase -i <parent>     → editör açılır
3. Satırları yeniden sırala, squash ekle
4. Kaydet + sekmeyi kapat
5. Conflict varsa çöz → git rebase --continue
6. git push --force-with-lease

Hiç yorum yok:

Yorum Gönder

Git: Commit Yönetimi ve Rebase Rehberi

Git: Commit Yönetimi ve Rebase Rehberi Bu rehber, staged değişiklikleri koruma, commit sırasını değiştirme ve squash işlemlerini kapsamaktad...