Kolay soruya kolay cevap git stash apply
Değişikliklerinizi yapmak istediğiniz dalı kontrol edin ve ardından git stash apply. Sonra git diffsonucu görmek için kullanın .
Değişikliklerinizi bitirdikten sonra - applyiyi görünüyor ve artık saklamaya ihtiyacınız olmadığından eminsiniz - sonragit stash drop kurtulmak için kullanın .
Her zaman kullanmak git stash applyyerine kullanmanızı öneririm git stash pop. Aradaki fark, applyistifin kolay yeniden denenmesi applyveya bakılması vb. İçin etrafta kalmasıdır. İstifin popçıkarılması mümkün ise, hemen da olacaktır dropve aniden bir yere çıkarmak istediğinizi fark ederseniz başka (farklı bir dalda), ya --indexda böyle bir şeyle , o kadar kolay değil. Eğer sen apply, ne zaman seçeceksin drop.
Yine de hepsi bir şekilde oldukça küçük ve bir aceminin gitmesi için hemen hemen aynı olması gerekir. (Ve bunların geri kalanını atlayabilirsiniz!)
Daha gelişmiş veya daha karmaşık şeyler yapıyorsanız ne olur?
Olduğu gibi, en az üç veya dört farklı "git stash kullanmanın" yolları vardır. Yukarıdaki "yol 1", "kolay yol" içindir:
Temiz bir dalla başladınız, bazı değişiklikler üzerinde çalışıyorsunuz ve daha sonra bunları yanlış dalda yaptığınızı fark ettiniz. Sadece sahip olduğunuz değişiklikleri almak ve başka bir şubeye "taşımak" istiyorsunuz.
Yukarıda açıklanan kolay durum budur. Koş git stash save(ya da sade git stash, aynı şey). Diğer dalı kontrol edin ve kullanın git stash apply. Bu git, git'in oldukça güçlü birleştirme mekanizmasını kullanarak önceki değişikliklerinizde birleşmeye başlar. Sonuçları beğenipgit diff beğenmediğinizi görmek için dikkatlice inceleyin (ile ) ve eğer isterseniz git stash dropzulayı düşürmek için kullanın . Sen bittin!
Bazı değişiklikler yaptınız ve sakladınız. Sonra başka bir şubeye geçtiniz ve daha fazla değişiklik başlattınız ve saklanmış olanları unutuyorsunuz.
Şimdi bu değişiklikleri korumak, hatta taşımak ve saklamak da istersiniz .
Aslında , değişikliklerin bir "yığın" yapar git stash savegibi tekrar yapabilirsiniz git stash. Bunu yaparsanız, biri sadece “ stashama aynı zamanda yazabilirsiniz” olarak adlandırılan stash@{0}ve bir tanesi de yazılan iki zuvanız vardır stash@{1}. Kullanım git stash list(her an) hepsini görmek için. En yenisi her zaman en düşük numaralıdır. Siz git stash drop, en yeniyi ve stash@{1}yığının üstüne hareket eden kişiyi bırakır . Hatta daha olsaydı, oldu bir stash@{2}hale gelir stash@{1}, ve böyle devam eder.
Siz applyve sonra dropbelirli bir zulayı da yapabilirsiniz: git stash apply stash@{2}vb. Belirli bir zulayı düşürmek, yalnızca daha yüksek numaralı olanları yeniden adlandırır. Yine, numarası olmayan da stash@{0}.
Çok fazla zıvana biriktirirseniz, oldukça dağınık olabilir (istediğim zulası mıydı stash@{7}yoksa öyle stash@{4}miydi? Şahsen bu değişiklikleri yeni bir şubeye aktarmayı tercih ediyorum, çünkü şubelerin isimleri var ve cleanup-attempt-in-Decemberbana göre çok daha fazla şey ifade ediyor stash@{12}. ( git stashKomut isteğe bağlı bir kaydetme mesajı alır ve bunlar yardımcı olabilir, ancak bir şekilde, tüm stash'larım sadece adlandırılır WIP on branch.)
(Ekstra gelişmiş) Çalıştırmadan önce kodunuzun belirli parçalarını kullandınız git stash save -pveya dikkatlice git addokudunuz ve / veya git rmkurunuz git stash save. Depolama dizini / hazırlama alanında bir sürümünüz ve çalışma ağacında başka bir (farklı) sürümünüz vardı. Bütün bunları korumak istiyorsun. Yani şimdi kullanıyorsunuz git stash apply --indexve bu bazen ile başarısız oluyor:
Conflicts in index. Try without --index.
git stash save --keep-index"Ne yapılacağını" test etmek için kullanıyorsunuz . Bu, bu cevabın kapsamı dışındadır; bunun yerine bu StackOverflow yanıtına bakın .
Karmaşık durumlar için, şu anda yaptığınız değişiklikleri (isterseniz yeni bir dalda) gerçekleştirerek önce "temiz" bir çalışma dizininde başlamanızı öneririm. Bu şekilde, onları uyguladığınız "bir yerlerde", içinde başka hiçbir şey yoktur ve sadece saklanan değişiklikleri denersiniz:
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 "temiz" bir başlangıç noktasındasınız. Ya da belki daha çok böyle gider:
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 en önemli şey "zula" olmasıdır olduğu o "/ komik tuhaf" sadece biraz olduğunu "bir dala" değil işlemek, bir taahhüt. applyŞimdi her yerden işlem değişti kesinleştirme ne görünüyor ve çalışır onu tekrar etmek. Zula hala orada olacak ( applyetrafında tutar), böylece daha fazla bakabilir veya bunun yanlış yer olduğuna karar verebilir applyve farklı bir şekilde tekrar deneyebilirsiniz.
Zulası her bulduğunuzda, zulandakinin git stash show -pbasitleştirilmiş bir sürümünü görmek için kullanabilirsiniz . (Bu, yalnızca "nihai çalışma ağacı" değişikliklere sürüm görünüyor basitleştirilmiş değil kaydedilen indeks bu değişiklikler --indexayrı ayrı geri yüklemeler.) Komutu git stash applyolmadan --indexsadece bu yapmaya çalışır, aynı anda iş-dizindeki değişiklikler.
Zaten bazı değişiklikleriniz olsa bile bu doğrudur. applyKomutu bir bir zulası uygulamak için mutlu olduğunu modifiye (uygulamak için denemek için, en azından ya) çalışma dizini. Örneğin şunları yapabilirsiniz:
git stash apply stash # apply top of stash stack
git stash apply stash@{1} # and mix in next stash stack entry too
Burada "uygula" sırasını seçebilir ve belirli bir sırayla uygulamak için belirli zulayı seçebilirsiniz. Bununla birlikte, her seferinde bir "git merge" işlemi gerçekleştirdiğinizde ve birleştirme belgelerinin uyarıda bulunduğu gibi:
Önemsiz, taahhüt edilmemiş değişikliklerle git birleştirme çalıştırmak önerilmez: mümkünse, bir çatışma durumunda geri çekilmesi zor bir durumda bırakabilirsiniz.
Temiz bir dizinle başlıyorsanız ve sadece birkaç git applyişlem yapıyorsanız , geri git reset --hardalmak kolaydır: temiz duruma geri dönmek ve applyişlemlerinizi değiştirmek için kullanın . (Bu yüzden bu karmaşık durumlar için önce temiz bir çalışma dizinine başlamanızı öneririm.)
Mümkün olan en kötü durum ne olacak?
Diyelim ki bir sürü Gelişmiş Git İşi yapıyorsunuz ve bir zulası yaptınız ve yapmak istiyorsunuz git stash apply --index, ancak kaydedilen zulayı uygulamak artık mümkün değil --index, çünkü şube, kaydettiğiniz zamandan beri çok fazla sapmış.
Bunun git stash branchiçin bu.
Eğer sen:
- orijinali yaptığınız zamanki kesin taahhüdü kontrol edin
stash, sonra
- yeni bir şube oluştur ve son olarak
git stash apply --index
değişiklikleri yeniden yaratma girişimi kesinlikle işe yarayacaktır. İşte böyle. (Ve başarılı bir şekilde uygulandığından beri zulası düşürür.)git stash branch newbranch
Hakkında bazı son sözler --index(bu ne halt?)
Ne --indexyapar açıklamak basittir, ama biraz içten karmaşık:
- Değişiklikleri varsa, gerek
git adddaha önce (veya "aşama") onlara commiting.
- Eğer çalıştırdığınızda Böylece
git stash, sen belki iki dosyayı düzenledikten foove zorgancak onlardan biri düzenledi.
- Eğer zula geri almak için sorduğunuzda o, yani güzel olabileceğini
git adds added şeyler yapar ve olmayan git add olmayan ilave şeyler. Eğer kendisine, added fooama zorgsenin yaptığın geri önce stash, o tam aynı kurulum olması güzel olabilir. Evrelendirilen, tekrar evrelendirilmelidir; modifiye edilmiş ancak aşamalanmamış olanların tekrar modifiye edilmesi, ancak aşamalandırılmaması gerekir.
--indexİçin bayrak applybu şekilde kurmak şeyler denemeden. Çalışma ağacınız temizse, bu genellikle işe yarar. Çalışma ağacınızda zaten bir şeyler addvarsa, burada nasıl bazı problemler olabileceğini görebilirsiniz. Dışarıda kalırsanız --index, applyişlem tüm aşamalı / unstaged kurulumu korumaya çalışmaz. Bunun yerine, "saklamak torba" daki iş ağacı taahhüdünü kullanarak git'in birleştirme makinelerini çağırıyor . Aşamalı / düzensiz korunmayı umursamıyorsanız, dışarıda bırakmak işini yapmayı --indexçok daha kolay hale getirir git stash apply.