Ana içeriğe geç

Yan yana

Git ResetvsGit Revert

git reset ile git revert arasındaki fark nedir?

Güncellendi 2 dk okuma7 fark

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

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 sayfasını oku

Git Revert

Git revert, önceki bir commit'i, tersi değişiklikleri içeren yeni bir commit oluşturarak geri alan, mevcut proje geçmişini olduğu gibi bırakan Git komutudur.

Git Revert sayfasını oku

Git Reset ve Git Revert karşılaştırması

ÖzellikGit ResetGit Revert
Ne yaparDal işaretçisini daha eski bir commit'e taşırEski bir commit'i tersine çeviren yeni bir commit ekler
GeçmişYeniden yazılır: sonraki commit'ler daldan düşerKorunur: özgün commit günlükte kalır
Paylaşılan dallarda güvenli miHayır, iş arkadaşlarında çelişen geçmiş oluşurEvet, sıradan bir yeni commit'tir
Çalışma dosyaları--soft, --mixed ya da --hard kipine göre korunur veya atılırYalnızca commit'in tersi uygulanarak değişir
Hangi commit'lerHedef commit'ten sonraki her şeyEski olsa bile herhangi bir commit ya da aralık
Push edildikten sonraUzak depoyu güncellemek için force push gerekirNormal bir push çalışır
En uygun olduğu yerPaylaşmadan önce yerel commit'leri temizlemekZaten yayımlanmış bir değişikliği geri almak

Fark, açıklamalı

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.

Hangisini kullanmalısınız?

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.

Son commit'i iki yolla geri almak

Git Resetbash
# Undo the last commit, keep its changes staged
git reset --soft HEAD~1

# Undo the last commit and discard its changes
git reset --hard HEAD~1

# Already pushed? The remote now needs a force push
git push --force-with-lease
Git Revertbash
# Create a new commit that undoes a specific commit
git revert a1b2c3d

# History now shows both the commit and its revert
git log --oneline
# f9e8d7c Revert "Add broken cache layer"
# a1b2c3d Add broken cache layer

git push

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.

Daha fazla

Ayarlar