Git'te saklanan içerikleri önizlemek mümkün mü?


554

Sık sık daha sonra işe koyulurdum, sonra başka şeyler gelir ve birkaç hafta sonra zulayı incelemek ve mevcut durumunda çalışan ağaca uygularsam ne gibi değişiklikler yapacağını öğrenmek istiyorum.

Ben bir zemine fark git yapabilirsiniz biliyorum, ama bu bana çalışma ağacı ve zulası arasındaki tüm farklılıkları gösterir, oysa ben sadece zuvanın geçerli ne değişecek bilmek istiyorum.

Bunu nasıl yapabilirim?


1
renklendirilmiş fark çıktısı: git stash show -p stash@{1} >~/.diff && vim ~/.diff( vimmetin düzenleyicinizde diffçıktı sözdizimi vurgulama desteği olduğu sürece herhangi bir metin düzenleyicisi olması gerekmez ).
Trevor Boyd Smith

Yanıtlar:


727

git stash showsize en son sakladığınız yerde değişen dosyaları gösterir. -pFarkı gösterme seçeneğini ekleyebilirsiniz .

git stash show -p

İlgilendiğiniz stash en son değilse, komutun sonuna stash adını ekleyin:

git stash show -p stash@{2}

Bu iyi görünüyor ve kılavuzda görüyorum, ama denediğimde bana fatal: unable to create temp-file: Invalid argumentneden olduğunu biliyor musunuz?
Benjol

29
git stash show -p stash@{0}Belirli bir zulayı görmek için kullanın . 0 son tonu, 1 ikinci sonuncuyu git stash listgösterir .. vs. tüm mevcutları gösterecektir.
brita_

6
PowerShell kullanıyorsanız, stash adını tırnak içine almanız gerekir. (yani: git stash show -p 'stash@{0}')
Scott-pascoe


1
git stash show -p stash@{0}> stash.txt
Farklı

87

Geçerli bir saklamak listesini görüntülemek için:

git stash list

Bunun gibi bir liste göreceksiniz:

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

Bu yığınlardan herhangi birinde fark görüntülemek için:

git stash show -p stash@{n}

34

gitkGit depolarını görselleştirmek için grafik kullanıcı arayüzünün hayranıyım . Şu şekilde saklanan son öğeyi görebilirsiniz:

gitk stash

Ayrıca, saklanan değişikliklerinizin herhangi birini (tarafından listelendiği gibi git stash list) görüntülemeyi de kullanabilirsiniz . Örneğin:

gitk stash@{2}

Aşağıdaki ekran görüntüsünde, zulayı sol üstte, taahhüt geçmişinde ne zaman ve nereden geldiğini, sağ altta değiştirilen dosyaların listesini ve altta satır satır farkını görebilirsiniz. -ayrıldı. Zımba hala sıkışmışken.

bir zulası görüntüleme gitk


5
Aynı stash@{X}anda daha fazla sonuç görmek için komut satırında birden fazla değer sağlayabilirsiniz , ancak gitk'te sadece 'tüm stash girişlerini göster' demenin basit bir yolunu bulamadım.
nobar

5
gitk stashiçin kestirme gibi görünüyorgitk stash@{0}
Leif Gruenwoldt

3
gitk'teki tüm depoları göstermek için kullanabilir gitk `git stash list --pretty=format:%gd`ve sonra bir sonraki saklamaya atlamak için "WIP on" arayabilirsiniz.
Ikar Pohorský

2
gitk --reflogtüm zulaları ve daha fazlasını görmenizi sağlar.
nobar

1
gitk bana, stash'ın kaydedilmemiş dosyaları olduğunu doğrudan gösteren tek araçtır. Diğerlerinin hepsi bana "fark yok" gösterdi.
Martin Bonner, Monica

22

Açılmamış bir depodaki tüm değişiklikleri görüntülemek için:

git stash show -p stash@{0}

Belirli bir dosyanın değişikliklerini açılmamış bir depoda görüntülemek için:

git diff HEAD stash@{0} -- path/to/filename.php

dosya adlarını hatırlamıyorsa, tüm dosyalar için de çalışır. git HE HE stash @ {0}
Simeon

Sadece netlik için: -pkısadır --patch. Seçenek geliyor git-diff. İsterseniz uzun formu yazabilirsiniz git stash show --patch.
Peterino

5

Git'teki saklı içerik önizlemesinin ötesinde Git'te saklanan içeriği önizlemek mümkün mü? tig ve call kurabilirsiniz tig stash. Bu ücretsiz / açık konsol programı aynı zamanda hangi zulayı karşılaştıracağınızı seçmenizi sağlar


1
Birden fazla depolamayı yönetmek için mükemmel bir araç gibi görünüyor! Ayrıca edebilirsiniz pop ve bırak ile stashes Pve !sırasıyla anahtarları.
Ikar Pohorský

TUI alternatifleri her zaman iyidir, ancak zaten kullanılmış olan veya bir şekilde tercih eden halk için, gitk tüm saklamak için onu kesmek nispeten kolaydır .
1737973

4

Ben renk farklı vurgulama (Fedora 21 üzerinde) ile tüm saklamak görmek için bunu kullanın:

git stash list | 
  awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n"; 
  system("git -c color.ui=always stash show -p " $1); }' | 
  less -R

(Git'ten uyarlandı : zulası uygulamadan zuhurda ne olduğunu görün )


4

Bu soru ilk sorulduğunda, bu bir seçenek olmayabilir, ancak PyCharm kullanıyorsanız, UnStash Changesaracı kullanabilirsiniz (VCS-> Git-> UnStash Değişiklikleri ...). Bu, saklanan değişikliklerin listesini, pop, bırak, temizle veya uygula (isterseniz yeni bir dalda) görüntülemenizi sağlar:

Değişiklikleri Pencereyi Kaldır

ve değiştirilen dosyaları saklamak için görüntüleyin:

Etkilenen Yollar Penceresi

ve dosya başına farklar. Diffs'de, saklanan değişikliklerden çalışma dalına uygulamak için bireysel değişiklikleri kiraz olarak seçebilirsiniz (sol işaretli şivronu kullanarak):

resim açıklamasını buraya girin


3

Tüm komutların listesini aşağıdaki komutla görüntüleyebilirsiniz:

$ git stash list

stash@{0}: WIP on dev: ddd4d75 spelling fix

stash@{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


stash@{12}: WIP on dev: 264fdab added token based auth

İlk yeni zulası.

nYukarıdaki listede verilen stash dizinini seçebilir ve stashed ayrıntılarını görüntülemek için aşağıdaki komutu kullanabilirsiniz

git stash show -p stash@{3}

Benzer şekilde,

git stash show -p stash@{n}

Diff komutunu kullanarak da kontrol edebilirsiniz:

git diff HEAD stash@{n} -- /path/to/file

3

evet neyin değiştirildiğini görmenin en iyi yolu dosyaya şu şekilde kaydetmektir:

git stash show -p stash@{0} > stash.txt

2

İlk önce tüm stash öğelerini almak için git stash listesinden yararlanabiliriz:

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

Daha sonra git stash show stash@{N}dosyaları belirli bir saklamanın altındaki kontrol etmek için kullanabiliriz N. Eğer ateş edersek şunu elde edebiliriz:

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Bunun nedeni kabuk küme parantezi kadar yiyor ve git gördüğünü olabilir stash@2değil stash@{2}. Bunu düzeltmek için parantezler için tek tırnak kullanmamız gerekir:

git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/java/myproject/MyJavaClass.java                    | 16 ++++++++--------
etc.

2

Saklanan değişikliklerin listesini görüntüle

git stash list

Belirli bir depoda değiştirilen dosyaların listesini görüntülemek için

git stash show -p stash@{0} --name-only

Belirli bir dosyayı saklamak için

git show stash@{0} path/to/file

1

Tüm depoları göster

Yalnızca dosya adları:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done

Tüm saklama alanlarında tam dosya içeriği:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done

space ( İleri ) ve b( geri ) qile sayfalaştırabileceğiniz ve geçerli saklamanın çağrı cihazını kapatabileceğiniz renklendirilmiş fark çıkışı elde edersiniz . Bir dosyada olmasını tercih ederseniz > stashes.diff, komuta ekleyin .


1

Kullanmayı öneren mevcut cevaplara ek olarak (üçüncü-son saklamanın farkını göstermek için)

git stash show -p stash@{2}

O Not git-stashbelgelerinde , bu yazılıdır

Stash'lara yalnızca stash indeksi belirtilerek de referans verilebilir (örn. Tamsayıya neşdeğerdir stash@{n}).

Bu nedenle kullanmak da mümkündür (bu yukarıdaki komuta eşdeğerdir)

git stash show -p 2

Bu da bazı Powershell sorunlarından kaçınmalıdır .


1

Sana gitktam olarak izlenmemiş ya da dizinde oturmuş nasıl gösterebilirim gibi , ama varsayılan olarak bu şube "diğer" geçerli daldaki diğer taahhütlerin ortasında gösterecektir.

Hile gitk'i şu şekilde çalıştırmaktır:

gitk "stash@{0}^!"

(Alıntı, Powershell'de çalışmasını sağlamak için var, ancak bu şekilde diğer kabuklarda da çalışmalıdır.)

Bu sözdizimini gitrevisions yardım sayfasında ararsanız aşağıdakileri bulacaksınız:

r1^!Notasyonu işlemek içerir r1 ama bütün velilerin hariç tutulacaklar. Tek başına, bu gösterim r1 tek taahhüdünü gösterir .

Görünüşe göre gitk öyle bir moda sokacak ki, sadece seçilen taahhüdün sadece yakın ebeveynleri gösterilecek, ki bu tam olarak sevdiğim şey.


Bunu daha da ileri götürmek ve tüm saklamak için listelemek istiyorsanız, bunu çalıştırabilirsiniz:

gitk `git stash list '--pretty=format:%gd^!'`

(Bick'i yatıştırmak için backticks içindeki bu tek tırnaklar gereklidir, aksi takdirde ünlem işareti şikayet eder)

Windows kullanıyorsanız ve cmd veya Powershell kullanıyorsanız:

gitk "--argscmd=git stash list --pretty=format:%gd^!"

0

Aşağıdaki komut, diğer herhangi bir saklanma veya kaydetme ya da dal ya da HEAD yerine depolanmış değişiklik farkını ayıklamak için kullanılabilir.

git stash show
git show
git diff
git difftool

Yukarıda belirtilen komutların her birini nasıl kullanabileceğimizi görelim.

  1. git stash gösterisi

Basit komut git stash show, dosya değişikliklerinin çok kısa bir özetini verir, ancak geçerli HEAD'e göre değişikliklerin farkını göstermez.

  1. git show

Git-show komutu çeşitli nesne türlerini görmek için kullanılır.

Git-show komutu yalnızca saklanan değişiklikleri görselleştirmek için değil, aynı zamanda lekeler, ağaçlar, etiketler ve taahhütler gibi bir veya daha fazla nesneyi görmek için de kullanılır.

  1. git fark

Git-diff komutu ayrıca, komutlar, çalışma ve çalışma ağacı vb. Arasındaki değişiklikleri göstermek için kullanılan ortak komutlardan biridir.

Varsayılan olarak, git diff, diğer stash referansı veya kesinleştirmesi belirtilmedikçe, seçilen stashın deponun mevcut durumuna (değiştirilmiş dosyalar) farkını gösterir.

En üstteki stash stash @ {0} ile ana şube arasındaki farkı elde etmek için:

$ git diff stash @ {0} ana

Değişikliklerden farklı olmayan yalnızca dosya adlarını görüntüleyin:

$ git diff - salt ad stash @ {0} ana

Seçilen bir dosya için seçilen saklama alanları arasındaki farklara bakın:

$ git diff stash @ {0} ^ 1 stash @ {0} -

  1. git difftool

Git-difftool komutu ayrıca seçilen stash ile seçilen kesin veya şube veya stash arasındaki farkı bulmak için de kullanılabilir

En son iki istif arasındaki farkı görün:

$ git difftool stash @ {0} stash @ {0} ^ 1

git difftool --dir-diff stash @ {0} stash @ {0} ^ 1

Özet:

Seçilen stash git stash show, git show, git diff, git difftool'dan farkı çıkarmak için yararlı olan komutlar.

Git stash show komutunu kullanarak farkı görün,

git stash gösterisi -p stash @ {0}

Git show komutunu kullanarak zuhurdaki değişiklikleri görün,

git show stash @ {1}

Git diff komutunu kullanarak en son sakla ile seçilen tamamlama arasındaki farkı görün.

git diff stash @ {0}

Referanslar:

https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.