DevOps Foundations · Modül 4: Git ve ekip çalışma akışı
Revert, Reset ve Kurtarma
Sürüm kontrolünde hatalar kaçınılmaz; geri alırken verilen hasar isteğe bağlı. Bu ders kitleye uyan geri almayı seçer: dünyaya revert, masana reset, felakete reflog.
11 dk okuma
Kazanımlar
- Yayımlanmış değişikliği tarihi yeniden yazmadan revert ile geri almak
- Reset kiplerini neyin sağ kalması gerektiğine göre seçmek: indeks, çalışma ağacı veya hiçbiri
- Kaybolmuş commitleri başka her şeyden önce reflog ile kurtarmak
- Paylaşılan dallara force-pushun neden ekip seviyesi olay olduğunu açıklamak
Neden önemli
Hatalı değişiklik main dalına ulaşır, dağıtımlar düşmeye başlar. Bir mühendis iki dakikada revert eder; servis toparlanır, değişiklik sonra düzgün düzeltmeyle döner. Diğeri main dalını sıfırlar ve zorla iter; her takım arkadaşının kopyası ayrışır, CI hayaletler derler, olay on kişilik tarih onarımıyla ikiye katlanır. Aynı hata, zıt kurtarmalar. Geri alma, değişikliği görmüş kitleye uymalıdır.
Kavramlar
Revert eskiyi geri alan yeni commit ekler. Tarih yalnızca eklenerek büyür: herkesin kopyası normal ilerler, hatalı değişiklik ve geri alınışı ikisi de görünür, sonra yeniden çıkarmak sıradan commit olur. İtilmiş, paylaşılmış veya dağıtılmış her şeyin tek güvenli geri alışı budur. Birleştirmeyi geri almak -m ile hangi ebeveynin ana hat olduğunu ister; tersi, özelliği kaldırmak yerine yeniden uygular.
Reset dal göstergeni taşır; isteğe bağlı indeks ve çalışma ağacıyla. --soft her şeyi aşamalı tutar (farklı yeniden commitlenir), --mixed işi tutar ama aşamayı düşürür (varsayılan, bilinçli yeniden aşamalanır), --hard tüm yerel değişiklikleri kalıcı siler. Kalıcılık uyarının tamamıdır: başka yere itmediğin işte --hard onu yok eder. Reset özel dalların masa aletidir; commitleri başka insan veya makine tuttuğu an yanıt revert olur, reset masadan kalkar.
Reflog Git'in uçuş kaydedicisidir: göstergelerin yaptığı her hareket, hatalı sıfırlama dahil, yaklaşık 90 gün saklanır. git reflog HEAD@{n} girdilerini eylemleriyle gösterir; git reset --hard HEAD@{n} veya karmada yeni dal kaybolanı geri getirir. Kurtarma sırası sabittir: dur, reflog, kurtarılan committe yeni dal, içeriği doğrula, sonra karar ver. Asla gc çalıştırma, nesneler belirir umuduyla taze klonlama ve sıfırlamayı düzeltmek için yeniden sıfırlama.
Uygulamalı örnek
Hatalı commit main dalında ve takım çekmiş. Güvenli geri alış:
$ git log --oneline -3 a1b2c3d (main) Raise default timeout to 120s e4f5a6b Healthcheck uses /ready 9d8e7f6 Release 1.4.0 $ git revert a1b2c3d --no-edit [main 7f6e5d4] Revert "Raise default timeout to 120s" $ git log --oneline -2 7f6e5d4 Revert "Raise default timeout to 120s" a1b2c3d Raise default timeout to 120s
Beklenen okuma: tarih küçülmek yerine bir commit büyüdü; her takım arkadaşı ayrışmadan normal çeker; revert mesajı neyi geri aldığını adlandırır, sonraki yeniden çıkarma ona atıf yapar. Yasak alternatifle karşılaştır: reset --hard HEAD~1 artı push --force; mevcut her kopyayı yetim bırakır, tek hatalı commiti ekip çapı onarıma çevirir. L11 labı bunu canlandırır: yayımlanmış hatayı revert et, tarihi bütün tut, doğrula.
Yaygın yanlış hamle
Tarihi güzel tutmak için paylaşılan dallara zorla itmek. Main dalında güzel tarih, her takım arkadaşının çalışan kopyasından değersizdir; yeniden yazım hatayı saklar, öğrenmeyi kaydetmez. Özel dalları özgürce yeniden yaz (rebase, squash, sırala); başkalarının çektiğini yayımlanmış say; yayımlanmış tarih yalnızca ileri gider.
Lab ve sonraki adım
L11 labı hatalı değişikliği paylaşılan deneme uzağına yayımlar; ikinci klondan doğrulamalı revert yolunu ister. Sırada 4. ders: tarihi incelenebilir yapar; çekme istekleri ve izlenebilirlik.
Mini kontrol
4 soruluk isteğe bağlı öz kontrol. Yanıtlar cihazından çıkmaz, saklanmaz ve hiçbir değerlendirmeye sayılmaz.
Ders geri bildirimi
Henüz yayında geri bildirim yok.
Geri bildirim yazmak için giriş yap ve dersi tamamla.
Kaynaklar
Alıştırma
İkinci klonla takım arkadaşını taklit eden deneme depoda: hatalı commit yayımla, ikinci klonda çek, main dalında revert et; iki klonun normal çekişle yakınsadığını göster. Sonra reset+force ayrışmasını göster (yalnızca denemede).
Geçme kriterleri
Revert yolu iki klonun temiz yakınsamasıyla gösterilmiş; reset+force ayrışması karşıtlık olarak gösterilmiş; gerçek paylaşılan depoya dokunulmamış.