Git stash'ı eklenen dosyaların üzerine yazmaya zorla


223

Git'te izlenmeyen bazı dosyalar var. Bazı değişiklikler yaptım ve bunları taahhüt etmek istedim, ama önce değiştirilmemiş dosyaları kontrol etmeyi unuttuğumu fark ettim. Bu yüzden dosyaları sakladım, sonra değiştirilmemiş sürümleri ekledim.

Sonra depoya saklamak uygulamak zaman, zaten eklenmiş dosyaları nedeniyle çakışmalar olsun.

Zulayı nasıl uygulayabilir ve zumdaki sürümleri depodaki orijinallere tercih etmek için nasıl zorlayabilirim?

Teşekkürler


7
Birisi daha iyi olana kadar çirkin çözüm: git rmyapmadan önce yeni dosyaları kaldırın git stash apply.
tom

Bu geçmişi kaybetmeyecek mi? Değiştirilmemiş sürümleri eklemenin nedeni tarihi korumaktı.
Stefan

1
Hayır, tarihi kaybetmeyecek. Bir dosyayı kaldırırsanız, küçük bir değişiklikle geri ekleyin ve sonra taahhüt edin, gitdosyayı sadece küçük bir değişiklik olarak kabul eder.
tom

Yanıtlar:


365

Şunun git checkoutyerine kullanın git stash apply:

$ git checkout stash -- .
$ git commit

Bu, geçerli dizindeki tüm dosyaları saklanmış sürümlerine geri yükler.


Çalışma dizininde saklanması gereken diğer dosyalarda değişiklikler varsa, işte bu daha az yoğun bir alternatiftir:

$ git merge --squash --strategy-option=theirs stash

Dizinde değişiklikler varsa veya birleştirme yerel değişikliklerle dosyalara dokunursa, git birleşmeyi reddeder. Tek tek dosyalar kullanarak

$ git checkout stash -- <paths...>

veya etkileşimli olarak

$ git checkout -p stash

Bunların hiçbiri kullanım durumumda işe yaramadı. Bulgular ve benim çözümüm burada stackoverflow.com/a/26685296/496046 - bu durumunuzu da çözmeli, @AlexanderBird
tremby

2
git checkout stash -- .Bu komut, onu çalıştırdığımda tam anlamıyla hiçbir şey yapmadı.
Rotsiser Mho

3
@RotsiserMho Git, onay iletileri sağlama konusunda çok iyi değil. Hiçbir şey yapmadığından emin misin? Benim için iyi çalıştı.
Sinjai

5
git checkout stash -- .Değişikliklerimi içeren en yüksek üst klasörde çalıştırmak zorunda kaldım , aksi takdirde sadece komutu çalıştırdığım klasöre değişiklikler uyguladı.
Leo

1
@Leo: Doğru, .geçerli dizini belirtmesi (dizini değiştirmek yerine farklı bir yolla değiştirebilirsiniz). Cevabımı daha açık hale getirmek için güncelledim.
tom

13

git stash show -p | git apply

ve sonra git stash dropsaklanan öğeleri bırakmak istiyorsanız.


2
Not: aksi takdirde alırsınız, düzgün çalışması için depo kök olmalıdır bu .
Ruslan

@PengheGeng Gördüğünüz gibi NetEmmanuel'ten yaklaşık bir yıl önce cevap verdim
Hasan TBT

@Ruslan Repo root
Leo

6

git stash popBu komutu çalıştırmak için

git stash show -p | git apply && git stash drop

1

TL; DR:

git checkout HEAD path/to/file
git stash apply

Uzun versiyon:

Üzerine yazmak istediğiniz işlenmemiş değişiklikler nedeniyle bu hatayı alırsınız. İle bu değişiklikleri geri al git checkout HEAD. İle belirli bir dosyadaki değişiklikleri geri alabilirsiniz git checkout HEAD path/to/file. Çatışmanın nedenini kaldırdıktan sonra, her zamanki gibi başvurabilirsiniz.

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.