Bir yama oluşturarak bir klasörü belirli bir işleme döndürme


99

İşte 'somefolder' klasörü için geçmişim

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

Bir klasör klasörünü 'Bazı klasörlerde düzeltilen hatalar' kaydına geri döndürmek istiyorum.

İkinci kayıt bir klasör dışındaki değişiklikleri içerdiğinden, bu taahhüdü geri almak istemiyorum.

Sanırım en güvenli yol, commit e095 ve 89cd arasında sadece bazı klasörler için geçerli olan bir diff / patch oluşturmak ve sonra bu yamayı uygulamak olacaktır. Bunu nasıl yapabilirim?

Yanıtlar:


162

Deponuzu belirli bir duruma güncellemek için git checkout'u kullanabilirsiniz .

git checkout e095 -- somefolder

Farkı oluşturmayla ilgili sorunuza gelince, bu da işe yarar. Mevcut durumunuzdan şuna geri dönmek için farkı oluşturmanız yeterlidir e095:

git diff 89cd..e095 -- somefolder

31
bu git reset e095 -- some/folder
işlemde

3
Git 2,22 itibaren kullanabileceğiniz --no-overlayiçin git checkoutsize kaldırılacaktır dışarı kontrol ediyoruz işlemediği anlamına izlenen dosyalar böylece.
Mariusz Pawelski

56

git resetDaha yeni kayıtlarda eklenen dosyaların kaldırılmasını da içeren dizini sıfırlamak için kullanabilirsiniz ( git checkoutkendi başına bunu yapmaz):

git reset e095 -- somefolder

Ancak git resetçalışma kopyasını güncellemez ve --hardseçenek klasörlerde çalışmaz. Öyleyse git checkout, çalışan kopyayı indeksle aynı yapmak için kullanın :

git checkout -- somefolder

ve sonra eklenen dosyaları da kaldırmak isterseniz, şunları da yapmanız gerekir:

git clean -fd somefolder

dizin yeni dosyalar içerdiğinde bu cevap benim için çalışıyor.
Yahoho

2
O sırada deponun gerçekten temiz bir anlık görüntüsünü istiyorsanız, bu cevap çok daha iyidir.
veri prensesi

Gerçekten çok daha iyi!
Alexis Pautrot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.