Git: kurtarmak için Nasıl kaydedilmemiş değişiklikler saklanmış
Geliştirme şube bazı kaydedilmemiş değişiklikler vardı ve onları git stash
kullanarak sakladım ama bu olanları sakladı arasında çok önemli bazı değişiklikler oldu. Bu değişiklikleri geri almak için herhangi bir yolu var mı?
Ayrıca, kod dosyalarını beri sakladığı üstünde bazı değişiklikler yaptım.
Eğer mümkünse yeni bir şube için değişiklik sakladığı almak gibi bir şansım var mı?
CEVAP
Kolay soru kolay cevap git stash apply
Sadece şube kontrol yaptığınız değişiklikleri istediğiniz, ve sonra git stash apply
. git diff
sonucu görmek için kullanın.
Değişiklikler apply
iyi görünüyor senin ile yaptıktan sonra saklamak ve herhangi bir ihtiyacın olmadığına emin misin dahasonragit stash drop
ondan kurtulmak için kullanın.
Ben her zaman git stash pop
yerine git stash apply
kullanmanızı öneririz. Farkı apply
etrafında zula bakmak için apply
, ya da, vb yeniden deneyin kolay bırakır. Eğer pop
mümkün ayıklamak için zula, öyle hemen de drop
ve eğer aniden gerçekleştirmek istediğin ayıklamak için başka bir yerde (farklı şube), ya da --index
ya da bunun gibi, bu o kadar kolay değil. apply
eğersana18 ** ne zaman seçeceğim.
Tüm oldukça küçük bir şekilde olsa, ve bir acemi gıt için, yaklaşık aynı olmalıdır. (Ve geri kalan herşey atlayabilirsiniz!)
Eğer daha gelişmiş ya da daha karmaşık şeyler yapıyorsan ne?
Orada en az üç ya da dört farklı "gıt kullanmanın yollarını saklamak gibi.", Yukarıdaki "yol 1", "kolay yolu":
Temiz bir şube ile başlayan, bazı değişiklikler üzerinde çalışıyordu, ve sonra yanlış şube bunları yaptığını fark etti. Şu anda değişiklikleri almak istiyor ve "" başka bir şube için onları. sadece hareket
Bu kolay bir durum, yukarıda açıklanmıştır.
git stash save
(veya düzgit stash
, aynı şey. Diğer şube kontrol vegit stash apply
kullanın. Bu gıt önceki değişiklikleri, gıt oldukça güçlü birleştirme mekanizmasını kullanarak birleştirmek için alır.Sonuçları dikkatlice inceleyin(git diff
ile) eğer onlar gibi olmadığını görmek için, ve eğer bunu yaparsanız, bırakmagit stash drop
zula kullanın. Bu kadar!Bazı değişiklikler başladı ve onları sakladı. Sonra başka bir dala geçiş ve daha fazla değişiklik, olanları sakladım sen bile unutmaya başladı.
Şimdi devam et, hatta taşımak istiyorumbudeğişiklikler,vesenin de zula geçerlidir.
Aslında
git stash save
git stash
bir "" değişiklik. yığın yapar gibi tekrar edebilirsiniz İki düzenleme var bunu yaparsan, sadecestash
—ama aynı zamandastash@{0}
stash@{1}
yazılmış yazabilirsiniz aradı.git stash list
(herhangi bir zamanda) hepsini görmek için kullanın. En yeni her zaman en düşük sayılı. Ne zaman yeni düşünceye 30**, ve üstünestash@{1}
hamle bir yığın. Eğer daha varsa,stash@{2}
biristash@{1}
ve benzeri olur.36**. 34 ** 35 ** bir özel zula sonra da: Belirli bir zula bırakarak, yüksek numaralı sadece onlar yeniden numaralandırır. Yine, bir numarası olmadan bir de
stash@{0}
.Eğer düzenleme çok kazık, (
stash@{7}
istedim zula yoksastash@{4}
? oldukça dağınık alabilirsiniz Ben sadece başka bir itti, şimdi 8 kalacaklar ve 5?). Ben dalları isimleri var, çünkü ben şahsen yeni bir şube için bu değişiklikleri aktarmak için tercih, vecleanup-attempt-in-December
stash@{12}
daha benim için çok daha anlamlı. (git stash
komutu isteğe bağlı bir ileti kaydetmek ve bu yardımcı olabilir, ama bir şekilde, bütün zulaları sadece*. *43) adlı rüzgar alır(Ekstra gelişmiş)
git stash save -p
git add
-ed ve/dikkatli kullandığınız veya-edgit rm
git stash save
çalıştırmadan önce kodunuzun belirli bir bit. Dizin/saklanmış salonda bir versiyonu vardı, ve çalışma ağacında (farklı) başka bir versiyonu. Tüm bu korumak istiyorsanız. Şimdi* *48, ve bazen başarısız kullanın:Conflicts in index. Try without --index.
Test etmek için
git stash save --keep-index
kullandığınız taahhüt ne olacak"". Bu cevap; this other StackOverflow answer bakın kapsamı dışında yerine.
Karmaşık durumlar için, "" çalışma dizini ilk, şimdi herhangi bir değişiklik yapılıyor (Eğer isterseniz yeni bir şube üzerinde). temiz başlamanızı öneririm "Onları bir yere uygulama", içinde başka bir şey vardır, ve sadece değişiklikleri saklanmış çalışıyor olacaksın: . bu sayede
git status # see if there's anything you need to commit
# uh oh, there is - let's put it on a new temp branch
git checkout -b temp # create new temp branch to save stuff
git add ... # add (and/or remove) stuff as needed
git commit # save first set of changes
Şimdi, sen bir "temiz" bir başlangıç noktası. Ya da belki de daha çok şöyle bir şey:
git status # see if there's anything you need to commit
# status says "nothing to commit"
git checkout -b temp # optional: create new branch for "apply"
git stash apply # apply stashed changes; see below about --index
Hatırlanması gereken temel şey bu."" . zula ^em>bir taahhüt, sadece biraz "anlamında değil," kayıt "dal". komik apply
operasyon değiştirdi işlemek ne bakar, ve şimdi her neredeysen tekrar dener. Malı olmaya devam eder (apply
tutar çevresinde), bak bu daha fazla veya karar bu oldu yanlış yere apply
ve tekrar deneyin farklı, ya da her neyse.
Bir herhangi bir zaman git stash show -p
ne basitleştirilmiş bir sürümü saklamak görmek için kullanabileceğiniz güvenli bir yere Sakla. (Bu basitleştirilmiş versiyonu sadece bakıyor "son iş ağacı" değiştirirdeğilkaydedilen Endeksi --index
ayrı ayrı yükler değişir.) Komutu --index
sadece o yapmaya çalışır olmadan 58**,aynısizin değişiklikler-dizin çalışma şimdi.
Bu zaten bazı değişiklikler varsa bile geçerlidir. apply
bir komut için zulası uygulamak için mutludeğiştirilmişdizin (ya da en azından, bunu uygulamak için denemek için) çalışıyor. Örneğin, bunu yapabilirsiniz:
git stash apply stash # apply top of stash stack
git stash apply stash@{1} # and mix in next stash stack entry too
"Burada düzen, belli bir sırayla uygulamak için özel ayarları geri almak. uygulamak seçebilirsiniz Her zaman temelde bir yaptığını unutmayın,"", ve birleştirme Belgeleri uyarıyor: . gıt birleştirme
Çalışan gıt önemsiz olmayan kaydedilmemiş değişiklikler ile birleştirme cesareti: mümkün olsa da, zor bir durumda bırakabilir arka çıkmak durumunda bir çatışma.
Eğer temiz bir dizin ile başlarve sadece git apply
birden fazla operasyon yapıyor, kolay geri: temiz bir duruma geri almak, ve apply
işlemleri değiştirmek için kullanın. git reset --hard
. (Bu karmaşık durumlar için temiz bir çalışma dizini ilk başlangıç, tavsiye ederim.)
Ne çok olası en kötü durum?
Diyelim yaptığını Çok İleri Git bir şey yaptın bir saklamak istediğiniz git stash apply --index
ama artık mümkün için geçerli kaydedilmiş saklamak --index
, çünkü şube var ayrılmaktadır bu yana çok zaman kurtardı.
Bu git stash branch
ne.
Eğer:
- check outtam olarak işlemekorijinal
stash
, o zaman sen de buldun - yeni bir şube oluşturmak, ve son olarak
git stash apply --index
yeniden oluşturma denemesi değişiklikleri kesinlikleiş. Bu git stash branch newbranch
yapıyor. (Ve daha sonra damla başarılı bir şekilde uygulanmış olduğu için Sakla.)
--index
hakkında bazı son sözler (konu neydi?)
--index
yaptıklarını açıklamak için basit, ama biraz karmaşık dahili:
- Değişiklik olduğunda, 73 ** (ya da "sahne")
commit
önce onları ing. git stash
, çalıştırdığınızda böyleceolabilirher ikifoo
** 77, dosyalar ama sadece bir tane sahnelenen düzenlenmiş.- Geri saklamak için sorduğunuzda, 78 **
add
ed şeyler s ve olursa güzel olabilirdeğilgit add
non-eklenen şeyler. Eğeradd
edfoo
zorg
değil senden önce geri eğer,stash
, aynı Kur için güzel olabilir. Ne değişiklik oldu ama sahnelenen, tekrar yapılması gerekiyor ama numaradan değil ne sahnelenen, tekrar sahnelenen olmalıdır;.
apply
--index
bayrağı işler bu şekilde çalışır. Eğer iş, ağaç temiz ise, bu genellikle işe yarıyor. Eğer iş, ağaç zaten add
ed şeyler varsa, olsa da, bazı sorunlar olabilir. Eğer gidersen --index
, apply
tüm operasyon düzenledi/unstaged Kur korumak için denemez. Bunun yerine, sadece git makine birleştirme çalışmaları-ağaç kullanarak "stash bag" taahhüt ... ... çağırır. Eğer/unstaged sahnelenen korumak umurunda eğer, --index
bırakmak git stash apply
onun bir şey yapmak için çok daha kolay hale getirir.
Nasıl Gıt zulası düştü kurtarmak için?...
Dosyalar ve klasörler de dahil olmak ü...
Nasıl bir Git branch yerel kaydedilmem...
Nasıl indirmek ve internetten bir dosy...
Nasıl resim fotoğraf kitaplığı iPhone ...