Kolay soruya kolay cevap git stash apply
Değişikliklerinizi yapmak istediğiniz dalı kontrol edin ve ardından git stash apply
. Sonra git diff
sonucu görmek için kullanın .
Değişikliklerinizi bitirdikten sonra - apply
iyi 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 apply
yerine kullanmanızı öneririm git stash pop
. Aradaki fark, apply
istifin kolay yeniden denenmesi apply
veya bakılması vb. İçin etrafta kalmasıdır. İstifin pop
çıkarılması mümkün ise, hemen da olacaktır drop
ve aniden bir yere çıkarmak istediğinizi fark ederseniz başka (farklı bir dalda), ya --index
da 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 drop
zulayı 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 save
gibi tekrar yapabilirsiniz git stash
. Bunu yaparsanız, biri sadece “ stash
ama 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 apply
ve sonra drop
belirli 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-December
bana göre çok daha fazla şey ifade ediyor stash@{12}
. ( git stash
Komut 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 -p
veya dikkatlice git add
okudunuz ve / veya git rm
kurunuz 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 --index
ve 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 ( apply
etrafında tutar), böylece daha fazla bakabilir veya bunun yanlış yer olduğuna karar verebilir apply
ve farklı bir şekilde tekrar deneyebilirsiniz.
Zulası her bulduğunuzda, zulandakinin git stash show -p
basitleş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 --index
ayrı ayrı geri yüklemeler.) Komutu git stash apply
olmadan --index
sadece bu yapmaya çalışır, aynı anda iş-dizindeki değişiklikler.
Zaten bazı değişiklikleriniz olsa bile bu doğrudur. apply
Komutu 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 apply
işlem yapıyorsanız , geri git reset --hard
almak kolaydır: temiz duruma geri dönmek ve apply
iş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 branch
iç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 --index
yapar açıklamak basittir, ama biraz içten karmaşık:
- Değişiklikleri varsa, gerek
git add
daha önce (veya "aşama") onlara commit
ing.
- Eğer çalıştırdığınızda Böylece
git stash
, sen belki iki dosyayı düzenledikten foo
ve zorg
ancak onlardan biri düzenledi.
- Eğer zula geri almak için sorduğunuzda o, yani güzel olabileceğini
git add
s add
ed şeyler yapar ve olmayan git add
olmayan ilave şeyler. Eğer kendisine, add
ed foo
ama zorg
senin 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 apply
bu ş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 add
varsa, burada nasıl bazı problemler olabileceğini görebilirsiniz. Dışarıda kalırsanız --index
, apply
iş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
.