Git Reset ile Önceki Commit'e Dönmek ve Değişiklikleri Local Changes'e Almak

Fatih Delice
Fatih Delice

Yazılım geliştirme sürecinde bazen yaptığınız commit’leri geri almak ya da bir önceki commit'e dönmek gerekebilir. Özellikle yanlışlıkla push edilen commit’ler, hatalı kodlar veya test amaçlı yapılan geçici değişiklikler projede sorun çıkarabilir. İşte bu noktada git reset komutu devreye girer.

Bu yazıda, Git reset ile önceki commit’e dönme, ardından değişiklikleri local changes (çalışma alanı) içine alma ve son olarak force push ile uzak (remote) repoyu güncelleme adımlarını inceleyeceğiz.

Git Reset Nedir?

git reset, Git deposunda HEAD işaretçisini belirli bir commit’e taşımanızı sağlar. Bu komut ile:

  • İstediğiniz commit’e dönebilirsiniz,
  • Sonraki commit’leri local changes olarak geri kazanabilirsiniz,
  • Gerektiğinde bu işlemi uzak repoya da yansıtabilirsiniz.

Önceki Commit'e Dönme

Bir önceki commit’e dönmek için şu komutu kullanabilirsiniz:

git reset <önceki-commit-id>

Buradaki <önceki-commit-id>, geri dönmek istediğiniz commit’in hash ID’sidir. Örneğin:

git reset a1b2c3d4

Bu komut çalıştırıldığında:

  • Proje, seçilen commit ID’sine döner.
  • O commit’ten sonraki değişiklikler local changes alanına taşınır.

Yani commit’ler silinmiş gibi görünür ama aslında yaptığınız değişiklikler kaybolmaz, sadece commit’lenmemiş hale gelir.

Değişiklikleri Local Changes’e Getirmek

Eğer git reset sırasında --soft veya --mixed parametrelerini kullanmazsanız, varsayılan olarak mixed modda çalışır.

  • --soft: Sadece HEAD’i geri alır, tüm değişiklikler staged alanında kalır.

  • --mixed (varsayılan): Commit’leri geri alır, değişiklikler local changes alanına düşer.

Örneğin:

git reset --mixed <önceki-commit-id>

Bu sayede, yaptığınız değişiklikler kaybolmadan working directory’ye gelir.

Remote Repo Güncelleme (Force Push)

Local’de commit’leri geri aldıktan sonra, uzak repodaki commit geçmişini de güncellemek isteyebilirsiniz. Bunun için force push kullanılır:

git push --force

⚠️ Dikkat:
--force kullanmak, remote repodaki commit geçmişini değiştirir. Eğer ekip olarak çalışıyorsanız, bu işlem takım arkadaşlarınızın repository kopyalarında sorun yaratabilir. Bu nedenle git push --force-with-lease daha güvenli bir tercihtir.

git push --force-with-lease

Bu komut, yalnızca sizin local’deki değişikliklerinizle eşleşen remote commit’leri siler ve olası veri kayıplarını önler.

Kullanım Senaryoları

  • Yanlışlıkla yapılan commit’leri geri almak.
  • Test commit’lerini temizlemek.
  • Projede “temiz commit geçmişi” oluşturmak.
  • Fazladan yapılan commit’leri local changes’e çekip tekrar düzenlemek.

Sonuç

Git reset, özellikle commit geçmişini yönetmek ve hatalı commit’leri geri almak için güçlü bir komuttur.

  • git reset <commit-id> ile önceki commit’e dönülür.

  • Değişiklikler local changes’e alınır.

  • git push --force ile uzak repo güncellenir.

Eğer commit geçmişinizde temizlik yapmak veya yanlış commit’lerden kurtulmak istiyorsanız, bu yöntem oldukça pratiktir. Ancak dikkatli kullanılmazsa ekip çalışmasında sorunlara yol açabilir.

Home
Me