Çalıştırırsam git stash -u
izlenmeyen dosyaları saklayabilirim. Ancak, söz konusu izlenmeyen dosyalar ile hiç görünmüyor git stash show stash@{0}
. Zulayı uygulamadan izlenmemiş zulalanmış dosyaları göstermenin bir yolu var mı?
Çalıştırırsam git stash -u
izlenmeyen dosyaları saklayabilirim. Ancak, söz konusu izlenmeyen dosyalar ile hiç görünmüyor git stash show stash@{0}
. Zulayı uygulamadan izlenmemiş zulalanmış dosyaları göstermenin bir yolu var mı?
Yanıtlar:
İzlenmeyen dosyalar, zula kaydetmenin üçüncü üst öğesinde saklanır. (Bu aslında belgelenmemiştir, ancak -u özelliğini tanıtan commit, 787513 ... ve ifadeler için belgelerin geri kalanınıngit-stash
yolu ... veya sadece yaparak oldukça açıktır git log --graph stash@{0}
)
Zulanın yalnızca "izlenmeyen" kısmını şu şekilde görüntüleyebilirsiniz:
git show stash@{0}^3
veya yalnızca "izlenmeyen" ağacın kendisi:
git show stash@{0}^3:
veya ağaçtaki belirli bir "izlenmeyen" dosya:
git show stash@{0}^3:<path/to/file>
Ne yazık ki, tüm aşamalı + aşamasız + izlenmemiş ve "mevcut" durum arasındaki farkların bir özetini almanın iyi bir yolu yoktur. yani: git show stash@{0}
izlenmeyen dosyaları içerecek şekilde yapılamaz. Bunun nedeni, stash@{0}:
zulalama işleminin ağaç nesnesinin üçüncü "aşamalanmamış" ebeveynden herhangi bir değişikliği içermemesidir.
Bunun nedeni, saklamaların yeniden uygulanma şeklidir: izlenen dosyalar kolayca yama olarak uygulanabilir, oysa izlenmeyen dosyalar yalnızca teorik olarak "tüm dosyalar" olarak uygulanabilir.
git log --graph --topo-order -m -u
. matthewlmcclure.com/s/2014/01/10/…
fatal: ambiguous argument 'stash@{0}^3': unknown revision or path not in the working tree.
yaptığınızı sanıyorsunuz) çirkin bir hata ( ) alacağınızı unutmayın .
git stash show
yok değil (en azından Git 2.7.4 için de geçerlidir) izlenmeyen dosyaları göstermek:
git stash pop
önce izlenmeyen dosyaları geri yüklemeyi, ardından izlenen dosyaları geri yüklemeyi deneyecek. İkinci işlem başarısız olursa (örn. Çakışma), ilk işlem geri alınmaz (izlenmeyen dosya zulası olduğu gibi kalır, ancak dosyalar diskten kaldırılmaz), bu nedenle çatışmayı düzeltseniz bile bir sonraki açılır pencere başarısız olur neyse.
Tüm zula kaydetme işlemlerini aşağıdaki komutla listeleyebilirsiniz:
git rev-list -g stash
Stash'ler, HEAD'in 3 yollu birleştirme kaydı, dizin ve izlenmeyen dosyaların ebeveyn içermeyen "kök" kaydı olarak temsil edildiğinden, izlenmeyen dosya zulaları, yukarıdaki çıktıyı aşağıdakilere yönlendirerek listelenebilir:
git rev-list -g stash | git rev-list --stdin --max-parents=0
Yukarıdakilerin faydalı uygulamaları:
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat
Elbette --stat
, dosyaların içeriğini görmek için öğesini kaldırın .
git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern>
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern>
git rev-list -g stash | git rev-list --stdin | xargs git show --stat
İzlenmeyen dosyaları zulada listelemek için:
git ls-tree -r stash@{0}^3 --name-only
Tüm izlenmeyen dosyaların (içerikli) tam bir farkını göstermek için:
git show stash@{0}^3
Bu komutlar son (en son) zulayı okur. Daha önceki zulalar için, "zula @" arkasındaki sayıyı artırın, örneğin stash@{2}
son zuladan saniye için.
Bunun işe git stash
yaramasının nedeni , her zula için stash@{0}
, stash@{1}
vb. Olarak başvurulabilen bir birleştirme kaydı oluşturmasıdır . Bu işlemenin ilk ebeveyni, zula sırasında HEAD'dir, ikinci üst öğe, izlenen dosyalardaki değişiklikleri içerir ve üçüncü (mevcut olmayabilir) izlenmeyen dosyalardaki değişiklikler.
Bu kısmen "Tartışma" altındaki kılavuzda açıklanmıştır .
Zuladaki tüm dosyaları (hem izlenen hem de izlenmeyen) görmek için, bu takma adı yapılandırmama ekledim:
showstash = "!if test -z $1; then set -- 0; fi; git show --stat stash@{$1} && git show --stat stash@{$1}^3 2>/dev/null || echo No untracked files -"
Görüntülemek istediğiniz zulaya ilişkin tek bir argüman alır . Yine de arka arkaya iki listede sunacağını unutmayın.
if...fi
Bölüm bash argüman değiştirir hiçbiri geçirildi eğer 0'a 1 $.
Çözüm: Dosyaları saklamadan önce hazırlamak git stash show -p
beklendiği gibi çalışacaktır.
git add .
git stash save
Not: Bu yol, etkileşimli bölümler eklemeye de güç verir, işte nasıl yapılır .
Dikkat: Önceden hazırlanmış bir çalışmanız olmadığından emin olun, aksi takdirde onu ayırt edemezsiniz.
Bu yararlı olabilir.
git stash show
çalışan kopya ile # 1 arasındaki farkı gösteriyor gibi görünür (git-stash.sh'den ilgili kod:git diff ${FLAGS:---stat} $b_commit $w_commit
burada $ b_commit # 1 ve $ w_commit stash commit'dir);git stash show
3 numarayı dahil etmenin yerleşik bir yolu var mı?