2012-05-15 8 views
6

Bir git deposunda Geçmişte belirli bir duruma sıfırlamak istediğim bir alt dizin var (daha önceki bir işlem). Belirli bir alt dizindeki dosyalardaki tüm işlemleri geri almak mümkün mü? Bu alt dizindeki dosyalar ile aynı anda başka bir yerde bulunan dosyalarda değişiklik yapan hiçbir taahhüt yoktur. Ancak bu dizinde bulunan değil olmayan dosyalar üzerinde taahhüt bırakmak mümkün olsaydı güzel olurdu?Alt geçmişini belirli bir geçmiş duruma kalıcı olarak sıfırla

Geçmişi kaldırmam gerekmez. Eski durumu kontrol etmek, alt dizinin şu andaki içeriğini kaldırmak ve eski durumu kopyalayıp yerinde tutmak sorun olmaz. Ama sonunda daha zarif (gitonic) yolu olabilir.

cevap

10

git checkout'un bir alt dizine uygulanabilmesi için bunu yapmanın en kolay yolu. Ardından sahne ve taahhüt:

git checkout <old-SHA1> -- path/to/subdir 
git add -A path/to/subdir 
git commit -m "reverted files in path/to/subdir to what it was at <old-SHA1>" 
+0

Bu, beklendiği gibi çalışmıyor gibi gözüküyor. Mevcut revizyonda var olan, ancak eski revizyonda olmayan dosyalar bu komuttan etkilenmezler, oysa 'git reset - hard' ile birlikte olacaklardır (ancak' git reset --hard 'alt dizinlerde kullanılamaz). – Ajedi32

1

Eğer geri almak istiyor kaydedilmesini tüm işe, bunları vazgeçme git revert kullanabilirsiniz - were sadece bir veya iki kaydedilmesini olmadığını bu en faydalı olacaktır baş belası.

CharlesB's answer, çok fazla taahhüt varsa veya işlemlerin diğer bölümlerine dokunursanız alacağınız daha basit bir yaklaşımdır (ancak, otomatik olarak -n (autocommit kullanmayın) bayrağını kullanarak bunu gerçekleştirebilirsiniz. İlgilendiğiniz değişiklikleri taahhüt ederim)

İlgili konular