Yanıtlar:
En son saklamaya bakın:
git stash show -p
Keyfi bir zulayı görün:
git stash show -p stash@{1}
Gönderen git stash
Man sayfalarından:
Varsayılan olarak, komut diffstat'ı gösterir, ancak git diff olarak bilinen herhangi bir biçimi kabul eder (örn. Git stash show -p stash @ {1}, yama biçiminde en son ikinci stash'ı görüntülemek için).
stash@{0}
varsayılan değerdir; bir argümana ihtiyacınız varsa, sadece daha önceki zulalara bakmak istiyorsanız.
{0}
.
-p
?
En son saklananları görmek için:
git stash show -p
Keyfi bir zulayı görmek için:
git stash show -p stash@{1}
Ayrıca, herhangi bir dal ile stash karşılaştırmak için git diff kullanın.
Kullanabilirsiniz:
git diff stash@{0} master
Şube yöneticisine kıyasla tüm değişiklikleri görmek.
Veya şunları kullanabilirsiniz:
git diff --name-only stash@{0} master
Kolayca sadece değişen dosya adlarını bulmak için.
git diff stash@{0} master
yapın, mevcut master'a karşı stashınızın bir farkını alırsınız (bu, stash'tan sonra master'da yapılan işi içerir) ), saklamanın değişeceği dosyalar / satırlar değil, sorunun ne olduğu.
git difftool --tool=... stash@{0} HEAD
git diff stash@{0}^ stash@{0}
git diff stash@{0} master -- filename
, değişiklikleri belirli bir dosyaya almak için dosya adını ekleyebilirsiniz .
Saklı değişikliklerinizin dayandığı dal bu arada değiştiyse, bu komut yararlı olabilir:
git diff stash@{0}^!
Bu zulayı dayandığı taahhütle karşılaştırır.
~/.gitconfig
:laststash = diff stash@{0}^!
git difftool stash^!
kesinleşmeye karşı git difftool stash HEAD
son
Çalışan ağacınız kirliyse , önce kirli çalışan ağacı işleyip ardından saklamakla karşılaştırarak sakla ile karşılaştırabilirsiniz. Daha sonra, kirli çalışan ağaçla olan taahhüdü geri alabilirsiniz (çünkü taahhüt günlüğünüzde bu kirli taahhüdü almak istemeyebilirsiniz).
İki yaklaşımı birbiriyle karşılaştırmak için aşağıdaki yaklaşımı da kullanabilirsiniz (bu durumda ilk başta saklananlardan birini açmanız yeterlidir).
Kirli çalışma ağacınızı uygulayın:
git add .
git commit -m "Dirty commit"
Bu taahhüdü saklayın:
git diff HEAD stash@{0}
Daha sonra, taahhüdü geri alabilir ve çalışma dizinine geri koyabilirsiniz:
git reset --soft HEAD~1
git reset .
Şimdi kirli çalışma ağacını zulanızla ayırdınız ve başlangıçta bulunduğunuz yere geri döndünüz.
git stash show -l
. En son saklamayı çalışan (kirli) kopyaya göre farklılaştırıyor mu? Almadan nasıl kullanıyorsunuz error: switch l requires a value
?
git stash show -l
. Neden sizin için işe yaramazsa, sadece git'in eski bir sürümünde olabileceğinizi tahmin edebilirim? Git v2.20.1'deyim ve hatasız çalışır.
@ Magne'nin cevabı , sorunun en esnek / yararlı yorumunu cevaplayan tek (çok geç) bir tarihtir, ancak gerekenden daha karmaşıktır. Taahhüt ve sıfırlama yerine, sadece çalışma kopyanızı saklayın, karşılaştırın, ardından taslağını kaldırın.
git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop
Bu, çalışma klasörü değişikliklerinizi geçici olarak stash yığınının tepesine (stash @ {0}) yaparak, stash yığınının üst kısmı ile çalışma klasörünüz arasındaki farkları gösterir, orijinal yukarıdan aşağıya (stash @ {1}) ) daha sonra orijinal üst kısmını 'yeni küme' konumunda kullanarak karşılaştırarak mevcut işinizin üstüne uygulamanızdan kaynaklanabilecek değişiklikleri görebilirsiniz.
"Peki ya şimdiki işim yoksa?" O zaman normal sıkıcı durumdasınız. @ Amber'ın cevabını kullan
git stash show
veya @ czerasz'ın cevabı
git diff stash@{0}
veya saklamanın ve sökmenin hızlı ve kolay olduğunu itiraf edin, sadece değişiklikleri kaldırın ve inceleyin. Şu anda istemiyorsanız, onları atın (geçerli dizin / çalışma klasörü değişir). Tam olarak bu
git stash apply
git diff
git reset
git checkout
git stash save -u
Bu git sürüm 1.8.5.2 benim için çalışıyor:
git diff stash HEAD
git stash apply
.
Diff için araçlarınız varsa (karşılaştırmanın ötesinde olduğu gibi)
git difftool stash HEAD
git stash apply
.
HEAD
. @ Yerlilbilgin 'in HEAD' ı kaldırmasına yönelik cevabını değiştirebilirim ama git kullanan herkes bu parçayı çözebilir ve cevabı uzatmak beni daha az okunabilir hale getirir. @ Yerlibilgin'e suçlama yok.
Bunu hiçbir şey hareket ettirmeden yapmanın bir yolu patch
git diff'in (temelde birleşik diffs) okuyabileceği gerçeğinden faydalanmaktır.
git stash show -p | patch -p1 --verbose --dry-run
Bu, yamanın normalde ne yapacağının adım adım önizlemesini gösterir. Bunun ek yararı, yamanın yamayı çalışma ağacına yazmasını engellememesidir, eğer herhangi bir nedenle, değişiklik yapmadan önce çalışmaya başlamak için gitmeniz gerekiyorsa, devam edin ve kaldırın - kuru- çalıştırın ve ayrıntılı talimatları izleyin.
Ben bu konu ve bu bir ne öğrendim birleştirerek , ben "stash içinde ne olduğunu görmek istiyorum", ben ilk çalıştırmak:
git stash show stash@{0}
Bu, hangi dosyaların değiştirildiğini gösterecektir. Sonra, bir diftoolde güzel bir görsel fark elde etmek için şunu yaparım:
git difftool --dir-diff stash@{0} stash@{0}^
Bu, verilen saklamanın ebeveyne karşı bir kerede tüm farklılıkları gösterecektir.
Fark aracını ~/.gitconfig
, örneğin Meld ile yapılandırabilirsiniz. :
...
[diff]
tool = meld
FWIW Bu, diğer tüm cevaplara biraz fazlalık getirebilir ve kabul edilen yanıta çok benzer; ama belki birine yardım eder.
git stash show --help
size ihtiyacınız olan her şeyi verecek; stash gösterisi bilgileri dahil.
göster [<stash>]
Zulaya kaydedilen değişiklikleri, saklanan durum ile orijinal üst öğesi arasındaki fark olarak gösterin. Hayır verildiğinde, en sonuncusu gösterilir. Varsayılan olarak, komut diffstat'ı gösterir, ancak git diff olarak bilinen herhangi bir biçimi kabul eder (örn. Git stash show -p stash @ {1}, yama biçiminde en son ikinci stash'ı görüntülemek için). Varsayılan davranışı değiştirmek için stash.showStat ve / veya stash.showPatch yapılandırma değişkenlerini kullanabilirsiniz.
O saklamak listesi
git stash list
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
Bu nedenle saklamak numarasını alın ve yapın:
Yapabilirsin:
git stash show -p stash@{1}
Ama bir fark istiyorsanız (bu saklamak için farklıdır, bu yüzden bu cevabı yazıyorum. Diff
Dalınızdaki mevcut kodu düşünün ve show
ne uygulayacağınızı gösterin )
Kullanabilirsiniz:
git diff stash@{0}
veya
git diff stash@{0} <branch name>
Yapılacak bir başka ilginç şey:
git stash apply
git stash apply stash@{10}
Bu, stash'ı listeden çıkarmadan uygular, git checkout .
bu değişikliği kaldırabilir veya git stash drop stash@{10}
listeden bir stash kaldırmaktan mutluluk duyarsanız .
Buradan ben kullanmayı tavsiye asla git stash pop
ve bir arada kullanmak git stash apply
ve git stash drop
yanlış dalında zulası uygularsanız ... iyi bazen kodunuzu kurtarmak için zordur.
Zulayı neyle karşılaştırmak istediğinize bağlı olarak (yerel çalışma ağacı / ebeveyn taahhüdü / kafa taahhüdü), aslında eski git diff
ve daha spesifik olan birkaç komut vardır git stash show
:
╔══════════════════════╦═══════════════════════════════╦═══════════════════╗
║ Compare stash with ↓ ║ git diff ║ git stash show ║
╠══════════════════════╬═══════════════════════════════╬═══════════════════╣
║ Local working tree ║ git diff stash@{0} ║ git stash show -l ║
║----------------------║-------------------------------║-------------------║
║ Parent commit ║ git diff stash@{0}^ stash@{0} ║ git stash show -p ║
║----------------------║-------------------------------║-------------------║
║ HEAD commit ║ git diff stash@{0} HEAD ║ / ║
╚══════════════════════╩═══════════════════════════════╩═══════════════════╝
İken git stash show
ilk görüşte görünüyor daha kullanıcı dostu, git diff
aslında daha güçlü bir daha odaklanmış fark için dosya belirterek gelinebileceğini içindedir. Şahsen benim zsh git eklentisinde tüm bu komutlar için takma adlar kurdum .