2011-07-01 16 views
151

pop, sonra aptalca git stash pop çalıştırmadan önce işlemeye unuttum. Pop, izlemesi zor olan bazı problemler (büyük kod tabanında kötü yöntem çağrıları) yarattı. git stash show'u çalıştırdım, bu yüzden en azından hangi dosyaların değiştirildiğini biliyorum. Başka bir şey yok, sanırım bu daha fazla işlemek için bir ders.geri alınıyor kazara git zulası ben birleştirme, karmaşık bir birleştirme yapmadan önce bazı yerel değişiklikler sakladığı yaptılar

Soruma Soru: Birleştirme işlemini geri almaksızın stash pop'unu geri almak mümkün mü?

+2

İlk önce işlem yapmadan 'stash pop' yapmanıza izin verilmemelidir. Bunu başarmak için ne yaptın? –

+0

Dürüst olmayacağından emin olun (bu dündü). Birleşme kendi başına işlemedi çünkü çatışmalar vardı. Bundan sonra stash pop'u çalıştırabiliyordum. – nren

+0

Bunu, sadece sürüm 1.7.9.msysgit.0 kullanarak biliyordum. Sahte dosyaları ve stash pop vardı sadece her şeyi birleştirdi. – PandaWood

cevap

58

Açtığınız stash'ı bulmak için How to recover a dropped stash in Git? kullanmayı deneyin. Sanırım her zaman bir saklamak için iki taahhüt var, çünkü endeksi ve çalışma kopyasını koruyor (çoğu zaman indeks işlemi boş olacak). Sonra, git show farkını görmek ve patch -R'u, bunları kaldırmak için kullanın.

Recovering stashes that were cleared/dropped erroneously 
    If you mistakenly drop or clear stashes, they cannot be recovered through the normal safety mechanisms. However, you can try the 
    following incantation to get a list of stashes that are still in your repository, but not reachable any more: 

     git fsck --unreachable | 
     grep commit | cut -d\ -f3 | 
     xargs git log --merges --no-walk --grep=WIP 

Bu git stash --help itibaren

+6

Wow çalıştı. Stash commits ile git fsck --no-reflog | awk '/ dangling commit/{print $ 3}' '(bağlantıdan) ve ben sadece bu farkı problemden el ile buldum. Teşekkürler! – nren

+0

fsck büyük bir liste çıkarır. Git için sıkıcı onun her SHA1 göster. Bunu nasıl yapıyorsun ? – meson10

+3

@ meson10: Ne yazık ki, sakatlar, açılmış saklanmaların tarihine bakmak için (gerçek bir dal olsalardı) bariz yol olan bir reflogda tutulurlar. Ayrıca, yardım talebinin reddedilmesi talebinin en iyi strateji olmadığını da belirtmeme izin verin. –

28

bana aynı senaryo ile kabul edilen yanıt daha iyi yardımcı oldu.

+8

"WIP" aramayı içeren birçok çözümün varsayılan stash iletilerine güveniyor olduğuna dikkat edin. Stashes açık mesajlar verirseniz, WIP içermeyebilir. –

+0

teşekkürler. Okunabilirliği geliştirmek için --oneline seçeneğini log komutuna ekledim. – basslo

0

çok başka bir seçenek olacaktır karmaşık değildir birleştirme ise:

  1. Taşı birleştirme dahil tüm değişiklikler
  2. çalıştırın birleştirme tekrar "git zulası" seçeneğini kullanarak saklamak ve değişiklikleri işlemek için geri değiştirir (düşürülmüş bölümden değişiklikler olmadan)
  3. Bir önceki dosyadaki tüm değişiklikleri görmezden gelmeleri gereken bir "git stash pop" dosyasını çalıştırın, çünkü dosyalar şimdi aynıdır.

Bundan sonra, sadece çok erken bıraktığınız saklanmaktan kalmışsınız.

İlgili konular