# Git Reset

Adres: https://softwaredictionary.org/tr/terimler/git-reset
Kategori: Sürüm Kontrolü
Son güncelleme: 2026-09-30

Kısaca: Git reset, mevcut branch'i daha eski bir commit'e geri taşıyan ve moduna göre staging area'yı ile dosyalarınızı da sıfırlayabilen bir Git komutudur.

## git reset nedir?

`git reset`, mevcut branch'i farklı, genellikle daha eski bir commit'i gösterecek şekilde geri sarar; bu da sonraki commit'leri o branch'in geçmişinden kaldırır. Esas olarak henüz paylaşılmamış yerel commit'leri geri almak ya da dosyaları staging'den çıkarmak için kullanılır. Örneğin `git reset HEAD~1`, branch'i bir commit geri taşır; buradaki `HEAD~1` 'mevcut olandan önceki commit' anlamına gelir.

Geri aldığınız commit'lerin değişikliklerine ne olacağını üç mod belirler. `--soft` yalnızca branch'i taşır ve bu değişiklikleri stage edilmiş, yeniden commit'e hazır bırakır; varsayılan olan `--mixed` onları ayrıca staging area'dan temizler ama çalışma dosyalarınızda tutar; `--hard` ise staging area'yı ve çalışma dosyalarını da sıfırlayarak commit edilmemiş her değişikliği atar. Bir commit yerine `git reset <file>` örneğindeki gibi bir dosya yolu verildiğinde komut, o dosyayı yalnızca staging'den çıkarır.

Reset, günlükte bir yer imini daha eski bir sayfaya geri taşımaya benzer; mod, o zamandan beri yazılan sayfaların gevşek notlar olarak mı saklanacağını yoksa atılacağını mı belirler. Reset'le uzaklaştırdığınız commit'ler hemen yok edilmez: `git reflog`, branch'in daha önce nereyi gösterdiğini listeler; böylece genellikle haftalarca `git reset --hard <old-hash>` ile geri dönebilirsiniz. Ancak `--hard` ile silinen commit edilmemiş düzenlemeler Git'e hiç kaydedilmemiştir ve bu yolla kurtarılamaz.

Git reset en sık `git revert` ile karıştırılır. Reset, branch işaretçisini taşıyarak geçmişi yeniden yazar; bu yerel commit'ler için sorun değildir, ancak başkalarının pull ettiği bir branch'te sorun çıkarır, çünkü onların kopyaları sizin kaldırdığınız commit'leri hâlâ içerir. Revert ise geçmişi olduğu gibi bırakır ve eski bir commit'i geri alan yeni bir commit ekler; bu yüzden paylaşılan commit'leri geri almanın güvenli yoludur. Reset ayrıca yalnızca dosyaları değiştiren ve hiçbir branch'i taşımayan `git restore`'dan da farklıdır.

## Önemli noktalar

- `git reset <commit>` mevcut branch'i başka bir commit'e taşır ve sonraki commit'leri ondan kaldırır.
- `--soft` geri alınan değişiklikleri stage edilmiş tutar, `--mixed` (varsayılan) stage edilmemiş tutar, `--hard` ise atar.
- `git reset <file>` içeriğini değiştirmeden bir dosyayı staging'den çıkarır.
- Reset geçmişi yeniden yazar; bu yüzden yerel commit'ler için onu, paylaşılanlar için `git revert`'i kullanın.
- `git reflog`, hatalı bir reset sonrası commit'leri kurtarmanıza yardımcı olabilir.

## Örnek: Üç reset moduyla commit'leri geri almak

```bash
# Undo the last commit but keep its changes staged
git reset --soft HEAD~1

# Undo the last commit and unstage its changes (the default, --mixed)
git reset HEAD~1

# Throw away the last commit AND all uncommitted changes (careful!)
git reset --hard HEAD~1

# Unstage a file without touching its contents
git reset src/app.ts

# Made a mistake? Find the previous position and go back to it
git reflog
git reset --hard HEAD@{1}
```

## Sık sorulan sorular

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

`git reset` bir branch'i daha eski bir commit'e geri taşır ve sonraki commit'leri ondan atar; bu yüzden henüz push edilmemiş yerel işler için uygundur. `git revert` ise eski bir commit'i geri alan yeni bir commit oluşturur ve geçmişi olduğu gibi bırakır; bu yüzden paylaşılan branch'lerde güvenlidir.

**git reset --soft, --mixed ve --hard arasındaki fark nedir?**

Üçü de branch'i hedef commit'e taşır. `--soft` geri alınan değişiklikleri stage edilmiş tutar, `--mixed` onları stage edilmemiş düzenlemeler olarak tutar, `--hard` ise onları hem staging area'dan hem de çalışma dizininden kaldırır.

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

Commit edilmiş iş genellikle kurtarılabilir: `git reflog` çalıştırın, branch'in reset'ten önce gösterdiği hash'i bulun ve oraya geri reset edin. `--hard` ile atılan commit edilmemiş değişiklikler ise Git tarafından hiç kaydedilmemiştir ve genellikle kurtarılamaz.

---

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