Apakah mungkin untuk melihat pratinjau konten simpanan di git?

554

Saya sering menunda pekerjaan untuk nanti, kemudian hal-hal lain datang, dan beberapa minggu kemudian, saya ingin memeriksa simpanan, dan mencari tahu perubahan apa yang akan terjadi jika saya menerapkannya pada pohon yang berfungsi dalam kondisi saat ini.

Saya tahu saya bisa melakukan git diff pada simpanan, tetapi ini menunjukkan kepada saya semua perbedaan antara pohon yang bekerja dan simpanan, sedangkan saya hanya tertarik untuk mengetahui apa yang berlaku untuk simpanan simpanan akan berubah.

Bagaimana saya bisa melakukan ini?

Benjol
sumber
1
keluaran diff berwarna: git stash show -p stash@{1} >~/.diff && vim ~/.diff(tidak harus vim. editor teks apa pun selama editor teks Anda memiliki sintaks yang menyoroti dukungan untuk diffoutput).
Trevor Boyd Smith

Jawaban:

729

git stash showakan menampilkan file-file yang diubah di simpanan terbaru Anda. Anda dapat menambahkan -popsi untuk menampilkan perbedaan.

git stash show -p

Jika simpanan yang Anda minati bukan yang terbaru, maka tambahkan nama simpanan ke akhir perintah:

git stash show -p stash@{2}
Jlew
sumber
Itu terlihat bagus, dan saya melihatnya di manual, tetapi ketika saya mencobanya memberi saya fatal: unable to create temp-file: Invalid argument- tahu mengapa?
Benjol
29
Gunakan git stash show -p stash@{0}untuk melihat simpanan tertentu. 0 menunjukkan nada terakhir, 1 yang terakhir terakhir .. dll. git stash listAkan menampilkan semua yang tersedia.
brita_
6
Jika Anda menggunakan PowerShell, Anda harus memasukkan nama simpanan ke dalam tanda kutip. (yaitu: git stash show -p 'stash@{0}')
scott-Pascoe
1
Jika Anda ingin menyimpan perbedaan dalam penggunaan filegit stash show -p stash@{0}> stash.txt
S_K
87

Untuk melihat daftar simpanan saat ini:

git stash list

Anda akan melihat daftar seperti ini:

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

Untuk melihat perbedaan pada salah satu simpanan tersebut:

git stash show -p stash@{n}
segfault
sumber
34

Saya penggemar gitkgrafis UI untuk memvisualisasikan git repos. Anda dapat melihat item terakhir yang disimpan dengan:

gitk stash

Anda juga dapat menggunakan tampilan perubahan simpanan Anda (sebagaimana didaftar oleh git stash list). Sebagai contoh:

gitk stash@{2}

Di tangkapan layar di bawah, Anda dapat melihat simpanan sebagai komit di kiri atas, kapan dan dari mana asalnya dalam komit, daftar file yang dimodifikasi di kanan bawah, dan perbedaan baris per baris di bawah -kiri. Semua sementara simpanan masih tersimpan.

gitk melihat simpanan

Jeff Ward
sumber
5
Anda dapat memberikan beberapa stash@{X}nilai pada baris perintah untuk melihat hasil lebih banyak sekaligus, tetapi saya belum menemukan cara sederhana untuk hanya mengatakan 'tampilkan semua entri simpanan' di gitk.
Nobar
5
gitk stashtampaknya menjadi singkatan untukgitk stash@{0}
Leif Gruenwoldt
3
untuk menampilkan semua simpanan di gitk, Anda dapat menggunakan gitk `git stash list --pretty=format:%gd`dan kemudian mencari "WIP aktif" untuk melompat ke simpanan berikutnya.
Ikar Pohorský
2
gitk --reflogmemungkinkan Anda melihat semua simpanan, dan banyak lagi.
Nobar
1
gitk adalah satu-satunya alat yang menunjukkan kepada saya secara langsung bahwa simpanan menyimpan file yang tersimpan di dalamnya. Semua yang lain hanya menunjukkan saya "tidak ada perbedaan".
Martin Bonner mendukung Monica
22

Untuk melihat semua perubahan dalam simpanan yang tidak muncul:

git stash show -p stash@{0}

Untuk melihat perubahan satu file tertentu dalam simpanan yang tidak muncul:

git diff HEAD stash@{0} -- path/to/filename.php
Wesley Musgrove
sumber
dalam kasus satu tidak ingat nama file itu juga berfungsi untuk semua file yang diubah git diff HEAD stash @ {0}
Simeon
Hanya untuk kejelasan: -pkependekan dari --patch. Pilihannya berasal git-diff. Jika Anda lebih suka bentuk panjang, Anda dapat menulis git stash show --patch.
Peterino
5

Di luar rekomendasi gitk di Apakah mungkin untuk melihat pratinjau konten simpanan di git? Anda dapat menginstal tig dan menelepon tig stash. Program konsol bebas / terbuka ini juga memungkinkan Anda memilih simpanan mana yang akan dibandingkan

Bruce
sumber
1
Sepertinya alat yang sempurna untuk mengelola banyak simpanan! Anda juga dapat pop dan drop simpanan dengan Pdan !tombol masing-masing.
Ikar Pohorský
Alternatif TUI selalu baik, tetapi untuk orang-orang yang sudah terbiasa atau entah bagaimana lebih suka gitk itu relatif mudah untuk meretasnya untuk menunjukkan semua simpanan .
1737973
4

Saya menggunakan ini untuk melihat semua simpanan saya dengan sorotan perbedaan warna (pada Fedora 21):

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

(Diadaptasi dari Git: lihat apa yang ada di simpanan tanpa menerapkan simpanan )

seanf
sumber
4

Ketika pertanyaan ini pertama kali ditanyakan, ini mungkin bukan opsi, tetapi, jika Anda menggunakan PyCharm, Anda dapat menggunakan UnStash Changesalat (VCS-> Git-> UnStash Changes ...). Ini memungkinkan Anda untuk melihat daftar perubahan simpanan, serta pop, drop, hapus, atau terapkan (ke cabang baru jika diinginkan):

Unstash Changes Window

dan melihat file yang diubah per simpanan:

Paths Affected Window

serta diffs per file. Di difs Anda dapat memilih perubahan individu untuk diterapkan dari perubahan simpanan ke cabang kerja (menggunakan chevron menunjuk kiri):

masukkan deskripsi gambar di sini

lebih lagi
sumber
3

Anda dapat melihat daftar semua simpanan dengan perintah berikut:

$ 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

Stash terbaru adalah yang pertama.

Anda cukup memilih indeks nsimpanan yang disediakan dalam daftar di atas dan menggunakan perintah berikut untuk melihat detail simpanan

git stash show -p stash@{3}

Demikian pula,

git stash show -p stash@{n}

Anda juga dapat memeriksa beda dengan menggunakan perintah:

git diff HEAD stash@{n} -- /path/to/file
Vishvajit Pathak
sumber
3

ya cara terbaik untuk melihat apa yang diubah adalah menyimpan dalam file seperti itu:

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

Pertama kita dapat menggunakan daftar simpanan git untuk mendapatkan semua item simpanan:

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

Kemudian kita dapat menggunakan git stash show stash@{N}untuk memeriksa file di bawah simpanan tertentu N. Jika kita memecatnya maka kita bisa mendapatkan:

$ 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>...]'

Alasan untuk ini mungkin karena cangkang memakan kawat gigi keriting dan git melihat stash@2dan tidak stash@{2}. Dan untuk memperbaikinya kita perlu menggunakan tanda kutip tunggal untuk kawat gigi sebagai:

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

Lihat daftar perubahan yang disembunyikan

git stash list

Untuk melihat daftar file diubah dalam simpanan tertentu

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

Untuk melihat file tertentu dalam simpanan

git show stash@{0} path/to/file
Bharat
sumber
1

Tampilkan semua simpanan

Hanya nama file:

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

Isi file lengkap di semua simpanan:

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

Anda akan mendapatkan hasil keluaran berwarna yang dapat Anda buat halaman space ( maju ) dan b( mundur ), dan quntuk menutup halaman untuk simpanan saat ini. Jika Anda lebih suka memilikinya dalam file kemudian tambahkan > stashes.diffke perintah.

ccpizza
sumber
1

Sebagai tambahan untuk jawaban yang ada yang menyarankan penggunaan (untuk menunjukkan perbedaan simpanan ketiga hingga terakhir)

git stash show -p stash@{2}

Perhatikan bahwa dalam git-stashdokumentasi , tertulis itu

Stash juga dapat direferensikan dengan menentukan hanya indeks simpanan (misalnya integer nsetara dengan stash@{n}).

Karena itu juga dimungkinkan untuk digunakan (ini setara dengan perintah di atas)

git stash show -p 2

Yang juga harus menghindari beberapa masalah Powershell .

pengguna202729
sumber
1

Saya suka bagaimana gitkbisa menunjukkan kepada Anda apa yang tidak terlacak atau duduk di indeks, tetapi secara default itu akan menunjukkan simpanan "komit" di tengah semua komit Anda lainnya di cabang saat ini.

Caranya adalah dengan menjalankan gitk sebagai berikut:

gitk "stash@{0}^!"

(Kutipan ada di sana untuk membuatnya bekerja di Powershell tetapi dengan cara ini ia tetap bekerja di kulit lain juga.)

Jika Anda mencari sintaks ini di halaman bantuan gitrevisions Anda akan menemukan yang berikut:

The r1^!notasi termasuk melakukan r1 tetapi tidak termasuk semua orang tuanya. Dengan sendirinya, notasi ini menunjukkan komit tunggal r1 .

Ini tampaknya akan menempatkan gitk dalam mode sehingga hanya orang tua langsung dari komit terpilih yang ditampilkan, yang persis seperti yang saya sukai.


Jika Anda ingin mengambil ini lebih lanjut dan daftar semua simpanan maka Anda dapat menjalankan ini:

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

(Kutipan tunggal di dalam backticks diperlukan untuk menenangkan Bash, jika tidak, akan mengeluh tentang tanda seru)

Jika Anda menggunakan Windows dan menggunakan cmd atau Powershell:

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

Perintah berikut ini dapat digunakan untuk mengekstrak perbedaan perubahan yang disimpan lagi sebelum simpanan lain atau komit atau cabang atau KEPALA.

git stash show
git show
git diff
git difftool

Mari kita lihat, bagaimana kita dapat menggunakan masing-masing perintah yang disebutkan di atas.

  1. acara simpanan git

Perintah sederhana git stash show memberikan ringkasan perubahan file yang sangat singkat, tetapi tidak akan menampilkan perbedaan perubahan terhadap HEAD saat ini.

  1. git show

Perintah git-show digunakan untuk melihat berbagai jenis objek.

Perintah git-show tidak hanya digunakan untuk memvisualisasikan perubahan simpanan, tetapi juga digunakan untuk melihat satu atau lebih objek seperti gumpalan, pohon, tag dan commit.

  1. git diff

Perintah git-diff juga merupakan salah satu perintah umum yang digunakan untuk menampilkan perubahan antara commit, commit dan working tree, dll.

Secara default, git diff akan menampilkan perbedaan simpanan terpilih terhadap (file yang dimodifikasi) keadaan repositori saat ini kecuali jika referensi simpanan atau komit lainnya ditentukan.

Untuk mendapatkan perbedaan antara sebagian besar simpanan paling tinggi @ {0} dan cabang utama:

master $ git diff simpanan @ {0}

Hanya tampilkan nama file, bukan perubahan:

$ git diff --name-only stash @ {0} master

Lihat perbedaan antara simpanan yang dipilih untuk file yang dipilih:

$ git beda simpanan @ {0} ^ 1 simpanan @ {0} -

  1. git difftool

Perintah git-difftool juga dapat digunakan untuk menemukan perbedaan antara simpanan terpilih dan komit terpilih atau cabang atau simpanan

Lihat perbedaan antara dua simpanan terbaru:

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

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

Ringkasan:

Perintah-perintah yang berguna untuk mengekstraksi diff dari stash git show terpilih, git show, git diff, git difftool.

Lihat perbedaan menggunakan perintah git stash show,

pertunjukan git simpanan -p simpanan @ {0}

Lihat perubahan dalam simpanan menggunakan perintah git show,

git show stash @ {1}

Lihat perbedaan antara simpanan terbaru dan komit terpilih menggunakan perintah git diff,

git beda simpanan @ {0}

Referensi:

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

hxysayhi
sumber