Git: Bir Commit'i Geri Alma
Son güncelleme
Bir commit'i nasıl geri alacağınız, hangi commit olduğuna ve push edilip edilmediğine bağlıdır. Geçmişinizin derinliklerinde kalmış eski bir commit - ya da zaten paylaşılmış herhangi bir şey - git revert ister; bu komut hiçbir şeyi yeniden yazmadan onu tersine çeviren yeni bir commit ekler. Art arda gelen yakın tarihli yerel commit'ler ise git reset ile basitçe geri alınabilir. Tek ihtiyacınız en son commit'i geri almaksa, git son commit'i geri alma sayfası bu hızlı düzeltmenin her çeşidini ele alır.
Bunları terminal playground'da deneyin: tarayıcınızda gerçek bir shell, kurmanız gereken hiçbir şey yok.
Hangi komut kullanılmalı
| Situation | Command |
|---|---|
| Daha eski tek bir commit'i geri al, sonrasındaki her şeyi koru | git revert <hash> |
| Zaten push ettiğin bir commit'i geri al | git revert <hash> |
| Son 3 yerel commit'i geri al, çalışmayı koru | git reset --soft HEAD~3 |
| Son 3 yerel commit'i geri al, çalışmayı sil | git reset --hard HEAD~3 |
| Bir aralığı yeni ters commit'lerle geri al | git revert HEAD~3..HEAD |
reset vs revert
| Behavior | git reset | git revert |
|---|---|---|
| Geçmişi yeniden yazar | Evet | Hayır |
| Push edilmiş commit'lerde güvenli | Hayır | Evet |
| Yeni bir commit oluşturur | Hayır | Evet |
| Geçmişin ortasındaki eski commit'lerde çalışır | Hayır | Evet |
| Değişiklikleri silebilir | Evet (--hard) | Hayır |
Çalışan örnek
Belirli bir eski commit'i - zaten push edilmiş olsa bile - sonrasında gelen commit'lere dokunmadan geri alın.
| Step | Command | Result |
|---|---|---|
| 1 | git log --oneline | Hatalı commit'in hash'ini bulun (örn. a1b2c3d) |
| 2 | git revert a1b2c3d | Yeni bir commit onu tersine çevirir; sonraki commit'ler olduğu gibi kalır |
| 3 | git push | Düzeltmeyi paylaşın - hiçbir geçmiş yeniden yazılmadı |
Git commit geri alma SSS
Sonrasındaki commit'leri kaybetmeden daha eski bir commit'i nasıl geri alırım?
git revert <hash> kullanın. Revert, yalnızca adını verdiğiniz commit'i tersine çeviren yeni bir commit oluşturur - ondan sonraki her commit tam olarak olduğu gibi kalır. Önce hash'i git log --oneline ile bulun. Revert sonraki değişikliklerle çakışırsa Git duraklar; çakışmayı çözüp git revert --continue çalıştırabilirsiniz.Birden çok commit'i aynı anda nasıl geri alırım?
git reset --soft HEAD~3, son üç commit'i değişikliklerini stage'de tutarak kaldırır (silmek için --hard kullanın). Push edilmiş commit'ler için bunun yerine aralığı revert edin: git revert --no-commit HEAD~3..HEAD üçünü de tersine çevirir; ardından tek bir git commit geri almayı kaydeder.Zaten push ettiğim bir commit'i nasıl geri alırım?
git revert <hash> kullanın. Revert, hedef commit'in değişikliklerini geri alan yeni bir commit oluşturur ve geçmişi olduğu gibi bırakır. Paylaşılan commit'leri geri almanın güvenli yolu budur; push edilmiş geçmişi reset ile yeniden yazmak, herkesi kendi kopyalarını uzlaştırmaya zorlar.