Başka bir yerde söylendiği gibi, cevap git add
dosyayadır. Örneğin:
git add path/to/untracked-file
git stash
Ancak, soru başka bir cevapta da ortaya çıkıyor: Dosyayı gerçekten eklemek istemezseniz ne olur? Söyleyebildiğim kadarıyla söylemelisin. Ve aşağıdakiler ÇALIŞMAZ :
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
bu, aşağıdaki gibi başarısız olur:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Peki ne yapabilirsin? Peki, dosyayı gerçekten eklemeniz gerekir, ancak daha sonra aşağıdakileri etkili bir şekilde kaldırabilirsiniz git rm --cached
:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
Daha sonra, daha önce bulunduğunuz durumda çalışmaya devam edebilirsiniz git add
(yani, izlenmeyen bir dosya ilepath/to/untracked-file
; artı izlenen dosyalarda olması gerekebilecek diğer değişiklikler).
Bu konuda bir iş akışı için başka bir olasılık şöyle olacaktır:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
[Not: @mancocapac tarafından yapılan bir yorumda belirtildiği gibi --exclude-standard
, git ls-files
komuta (yani, git ls-files -o --exclude-standard
) eklemek isteyebilirsiniz .]
... bu da kolayca yazılabilir - takma adlar bile yapardı (zsh sözdiziminde sunulur; gerektiği gibi ayarlayın) [ayrıca, dosya adını kısalttım, böylece bu cevapta kaydırma yapmadan ekrana sığacak; seçtiğiniz alternatif bir dosya adını değiştirmekten çekinmeyin]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
Not ikincisi daha iyi bir kabuk ya da fonksiyon olarak olabileceğini, parametreler verilmek üzere izin vermek git stash
istemediğiniz durumda, pop
ancak apply
, ve / veya belirli bir zulası belirtmek yerine, sadece üst alarak edebilmek istiyorum bir. Belki de bu (yukarıdaki ikinci takma ad yerine) [boşluk, kaydırma yapmadan sığacak şekilde soyulmuştur; okunabilirliği artırmak için yeniden ekleyin]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Not : Eğer, örneğin bir zula tanımlayıcı tedarik geçiyorsanız, şu formda, tanımlayıcı yanı sıra bir eylem argümanı sağlamanız gerekmektedir unstashall apply stash@{1}
veyaunstashall pop stash@{1}
Tabii ki .zshrc
uzun vadede var olmak için kendi veya eşdeğeri koymak .
Umarım bu cevap birisi için yararlıdır, her şeyi tek bir cevapta toplar.
git stash show
unutmayın, hiçbir şey döndürmez ve onu bırakmaya cazip gelebilirsiniz (birkaç ay önce yazdığım yararlı bir senaryo içerdiğinde yaptığım gibi) → bırakılan bir saklamanın nasıl kurtarılacağı )