Git Revert
- Okunuşu
- git rivört
Kısaca
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 nedir?
git revert, zaten paylaşılmış bir commit'i geri almanın güvenli yoludur. Git commit'i silmek yerine, değişikliklerinin tam tersini hesaplar (eklediği satırlar kaldırılır, kaldırdığı satırlar geri gelir) ve bunu yepyeni bir commit olarak kaydeder. Özgün commit geçmişte kalır ve ardından mesajı 'Revert' ile başlayan bir commit gelir.
Geri alınacak commit'in hash'ini git revert a1b2c3d örneğindeki gibi verirsiniz; Git mesaj için bir editör açar ya da --no-edit eklerseniz varsayılan mesajı kullanır. Daha önce yayımlanmış hiçbir şey yeniden yazılmadığı için ekip arkadaşları revert'i diğer commit'ler gibi pull eder; bu da main ya da bir release branch'inde kötü bir değişikliği geri çekmenin standart yoludur. Bir merge commit'i geri almak için, korunacak ana hattın hangi ebeveyn olduğunu Git'e söyleyen -m 1 gerekir.
Geri almak, teslim edilmiş her nüshayı geri çağırmak yerine gazetede bir düzeltme yayımlamaya benzer: özgün makale kayıtta kalır ve düzeltme neyin değiştiğini açıklar. Geri alınan satırlara sonraki commit'ler de dokunmuşsa Git bir çakışma bildirebilir; bunu her zamanki gibi çözer ve git revert --continue ile tamamlarsınız.
En yaygın karışıklık git revert ile git reset arasındadır. Reset bir branch'i geri taşır ve sonraki commit'lerin ondan kaybolmasına yol açar; bu geçmişi yeniden yazar ve commit'ler push edilmişse başkalarının kopyalarını bozar. Revert ise yalnızca yeni bir commit ekler. Revert ayrıca bir dağıtım rollback'inden de daha dardır: rollback önceki bir sürümü yeniden canlıya alır, revert ise kodun kendisini değiştirir ve ekipler çoğu zaman ikisini birden yapar.
Önemli noktalar
git revert <hash>, önceki bir commit'in değişikliklerini tersine çeviren yeni bir commit oluşturur.- Geçmiş yeniden yazılmaz; bu yüzden
maingibi paylaşılan branch'lerde kullanmak güvenlidir. - Bir merge commit'i geri almak için hangi ebeveynin korunacağını seçen
-m 1gerekir. - Çakışmalar her zamanki gibi çözülür ve
git revert --continueile tamamlanır. - Push edilmemiş yerel commit'ler için
git reset, yayımlanmış olanlar içingit revertkullanın.
Örnek
# Find the commit that introduced the problem
git log --oneline
# 9f8e7d6 Add discount banner
# a1b2c3d Change checkout validation <- this one broke checkout
# Create a new commit that undoes it, using the default message
git revert --no-edit a1b2c3d
# Undo a merge commit, keeping the first parent (usually main)
git revert -m 1 4d5e6f7
# Share the fix like any other commit
git pushSık sorulan sorular
git revert ile git reset arasındaki fark nedir?
git revert, ters değişikliklerden oluşan yeni bir commit ekleyerek bir commit'i geri alır; yani geçmiş yalnızca büyür. git reset ise bir branch'i daha eski bir commit'e geri taşır ve sonraki commit'leri atar; bu geçmişi yeniden yazar ve push etmediğiniz commit'lerle sınırlı tutulmalıdır.
Birkaç commit'i aynı anda geri alabilir miyim?
Evet. Birkaç hash ya da A'dan sonraki her commit'i B dahil olmak üzere kapsayan git revert A..B gibi bir aralık verin; Git her biri için bir revert commit'i oluşturur. Tüm geri almaları stage edip tek bir commit olarak kaydetmek için --no-commit ekleyin.
Bir revert nasıl geri alınır?
Revert commit'inin kendisini git revert <revert-hash> ile geri alın; bu, özgün değişiklikleri başka bir yeni commit olarak geri getirir. Temeldeki sorun giderildikten sonra bir değişikliği yeniden uygulamanın olağan yolu budur.
Sık karşılaştırılanlar
İlgili sayfalar
- Git ResetSürüm Kontrolü, s. 20Git 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.
- CommitSürüm Kontrolü, s. 5Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
- MergeSürüm Kontrolü, s. 29Git'te merge, bir branch'teki değişiklikleri başka bir branch'e katarak ayrı geliştirme hatlarını tek ve ortak bir geçmişte yeniden birleştirir.
- Cherry-pickSürüm Kontrolü, s. 3Git'te cherry-pick, belirli bir commit'in değişikliklerini geldiği branch'in geri kalanını birleştirmeden, mevcut branch'inize yeni bir commit olarak kopyalar.
- RollbackDevOps ve Bulut, s. 43Rollback, yeni bir dağıtım hatalara, kesintilere ya da beklenmedik başka sorunlara yol açtığında yazılımı önceki, sorunsuz sürüme döndürme işlemidir.
- Git PushSürüm Kontrolü, s. 18Git push, yerel commit'lerinizi uzak bir depoya yükleyip oradaki ilgili branch'i güncelleyen Git komutudur; böylece başkaları çalışmanızı görüp kullanabilir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin