# Git Reset vs Git Revert

Adres: https://softwaredictionary.org/tr/karsilastirma/git-reset-vs-git-revert
Son güncelleme: 2026-09-30

Kısaca: Git reset dalı eski bir commit'e geri taşır ve sonrakileri atar; git revert ise bir commit'i geri alan yeni bir commit ekler, paylaşılan dallarda güvenlidir.

## git reset ile git revert arasındaki fark nedir?

`git reset`, geçerli dal işaretçisini başka bir commit'e taşır ve kipe bağlı olarak hazırlık alanını (staging area) ve çalışma dosyalarınızı da değiştirebilir. `git revert` mevcut geçmişe dokunmaz ve değişiklikleri, geri almak istediğiniz commit'in tam tersi olan yeni bir commit oluşturur.

Fark, geçmişin yeniden yazılıp yazılmadığıdır. Reset commit'leri daldan çıkarır; bu, kimsenin görmediği yerel işler için sorun değildir ama o commit'leri zaten çeken iş arkadaşları için işleri bozar. Revert ise geçmişe yalnızca ekleme yapar; bu yüzden `main` gibi paylaşılan bir dalda zaten bulunan bir değişikliği geri almanın güvenli yoludur.

Reset'in üç ana kipi vardır: `--soft` geri alınan değişiklikleri hazırlık alanında tutar, `--mixed` (varsayılan) onları hazırlanmamış düzenlemeler olarak tutar, `--hard` ise atar. Revert yalnızca sonuncusunu değil herhangi bir commit'i geri alabilir; tipik bir iş akışı yerel commit'leri temizlemek için reset'i, zaten push edilmiş kötü bir değişikliği geri çekmek için revert'i kullanır.

Sık yapılan bir yanlış, `git reset --hard`'ın commit'leri sonsuza dek sildiği düşüncesidir. Git eski commit'leri bir süre saklar ve `git reflog` bunları genellikle bulup geri getirebilir; ancak `--hard`'ın attığı commit edilmemiş değişiklikler gerçekten kaybolur.

| Özellik | Git Reset | Git Revert |
| --- | --- | --- |
| Ne yapar | Dal işaretçisini daha eski bir commit'e taşır | Eski bir commit'i tersine çeviren yeni bir commit ekler |
| Geçmiş | Yeniden yazılır: sonraki commit'ler daldan düşer | Korunur: özgün commit günlükte kalır |
| Paylaşılan dallarda güvenli mi | Hayır, iş arkadaşlarında çelişen geçmiş oluşur | Evet, sıradan bir yeni commit'tir |
| Çalışma dosyaları | `--soft`, `--mixed` ya da `--hard` kipine göre korunur veya atılır | Yalnızca commit'in tersi uygulanarak değişir |
| Hangi commit'ler | Hedef commit'ten sonraki her şey | Eski olsa bile herhangi bir commit ya da aralık |
| Push edildikten sonra | Uzak depoyu güncellemek için force push gerekir | Normal bir push çalışır |
| En uygun olduğu yer | Paylaşmadan önce yerel commit'leri temizlemek | Zaten yayımlanmış bir değişikliği geri almak |

## Git Reset şu durumlarda doğru seçim

- Commit'ler yalnızca sizin makinenizde duruyor.
- Yakın zamandaki yerel commit'leri birleştirmek (squash) ya da yeniden yapmak istiyorsunuz.
- Dosyaları hazırlık alanından çıkarmak ya da yerel değişiklikleri atmak istiyorsunuz.

## Git Revert şu durumlarda doğru seçim

- Commit zaten paylaşılan bir dala push edildi.
- Nelerin geri alındığını gösteren net bir kayıt istiyorsunuz.
- Sonraki commit'leri koruyarak daha eski bir commit'i geri almak istiyorsunuz.

## Sık sorulan sorular

**Bir git reset geri alınabilir mi?**

Genellikle evet. `git reflog` dalın daha önce nereyi gösterdiğini listeler, böylece o commit'e geri reset atabilirsiniz; yalnızca `--hard` ile kaybedilen commit edilmemiş değişiklikler bu yolla kurtarılamaz.

**main üzerinde reset mi revert mi kullanmalıyım?**

Revert kullanın. `main` gibi paylaşılan dalların geçmişi yeniden yazılmamalıdır; revert commit'i değişikliği geri alırken herkesin kopyasını tutarlı tutar.

**Bir revert geri alınabilir mi?**

Evet. Revert commit'ini revert etmek özgün değişiklikleri yeniden uygular; bu, bir özelliği düzelttikten sonra geri getirmenin yaygın bir yoludur.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
