Bagaimana saya bisa melihat perubahan un-stashing akan membuat pohon kerja saat ini? Saya ingin tahu perubahan apa yang akan dilakukan sebelum menerapkannya!
Bagaimana saya bisa melihat perubahan un-stashing akan membuat pohon kerja saat ini? Saya ingin tahu perubahan apa yang akan dilakukan sebelum menerapkannya!
Jawaban:
Lihat simpanan terbaru:
git stash show -p
Lihat simpanan sewenang-wenang:
git stash show -p stash@{1}
Dari halaman git stash
manual:
Secara default, perintah ini menunjukkan diffstat, tetapi ia akan menerima format apa pun yang dikenal dengan git diff (misalnya, git stash show -p stash @ {1} untuk melihat simpanan terbaru kedua dalam bentuk tambalan).
stash@{0}
adalah default; Anda hanya perlu argumen jika Anda ingin melihat simpanan sebelumnya.
{0}
.
-p
berdiri?
Untuk melihat simpanan terbaru:
git stash show -p
Untuk melihat simpanan sewenang-wenang:
git stash show -p stash@{1}
Juga, saya menggunakan git diff untuk membandingkan simpanan dengan cabang apa pun.
Kamu bisa menggunakan:
git diff stash@{0} master
Untuk melihat semua perubahan dibandingkan dengan master cabang.
Atau Anda dapat menggunakan:
git diff --name-only stash@{0} master
Untuk mudah menemukan hanya mengubah nama file.
git diff stash@{0} master
, Anda mendapatkan simpanan simpanan Anda terhadap master saat ini (yang mencakup pekerjaan yang dilakukan pada master setelah simpanan dibuat), bukan file / baris yang akan diubah simpanannya, yang menjadi pertanyaannya.
git difftool --tool=... stash@{0} HEAD
git diff stash@{0}^ stash@{0}
git diff stash@{0} master -- filename
untuk mendapatkan perubahan pada file tertentu.
Jika cabang tempat Anda menyimpan simpanan perubahan telah berubah, perintah ini mungkin berguna:
git diff stash@{0}^!
Ini membandingkan simpanan dengan komit yang menjadi dasarnya.
~/.gitconfig
:laststash = diff stash@{0}^!
git difftool stash^!
untuk perbedaan simpanan terakhir terhadap komit yang menjadi git difftool stash HEAD
Jika pohon kerja Anda kotor , Anda dapat membandingkannya dengan simpanan dengan terlebih dahulu melakukan pohon kerja kotor, dan kemudian membandingkannya dengan simpanan. Setelah itu, Anda dapat membatalkan komit dengan pohon kerja kotor (karena Anda mungkin tidak ingin memiliki komit kotor di log komit Anda).
Anda juga dapat menggunakan pendekatan berikut untuk membandingkan dua simpanan satu sama lain (dalam hal ini Anda hanya mencabut salah satu simpanan pada awalnya).
Komit pohon kerja kotor Anda:
git add .
git commit -m "Dirty commit"
Bedakan simpanan dengan komit itu:
git diff HEAD stash@{0}
Kemudian, setelah itu, Anda dapat mengembalikan komit, dan memasukkannya kembali ke dir:
git reset --soft HEAD~1
git reset .
Sekarang Anda telah memisahkan pohon kerja kotor dengan simpanan Anda, dan kembali ke tempat Anda semula.
git stash show -l
. Apakah ini berbeda dengan simpanan terbaru terhadap copy pekerjaan (kotor)? Bagaimana Anda menggunakannya tanpa mendapatkan error: switch l requires a value
?
git stash show -l
. Mengapa ini tidak berhasil untuk Anda, saya hanya bisa menebak Anda mungkin menggunakan versi git yang lebih lama? Saya menggunakan git v2.20.1, dan berfungsi dengan sempurna tanpa kesalahan.
Jawaban @ Magne adalah satu-satunya tanggal (yang sangat terlambat) yang menjawab interpretasi pertanyaan yang paling fleksibel / berguna, tetapi ini sedikit lebih rumit daripada yang diperlukan. Daripada melakukan dan mengatur ulang, cukup sembunyikan salinan pekerjaan Anda, bandingkan, lalu lepaskan simpanan.
git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop
Itu menunjukkan kepada Anda perbedaan antara bagian atas tumpukan simpanan dan folder kerja Anda dengan sementara membuat perubahan folder kerja Anda menjadi bagian atas tumpukan simpanan (simpanan @ {0}), memindahkan yang asli dari atas ke bawah (simpanan @ {1} ) kemudian membandingkan dengan menggunakan atasan asli di posisi 'set baru' sehingga Anda melihat perubahan yang dihasilkan dari menerapkannya di atas pekerjaan Anda saat ini.
"Tapi bagaimana kalau aku tidak punya pekerjaan saat ini?" Maka Anda berada dalam kasus membosankan yang normal. Gunakan saja jawaban Amber
git stash show
atau jawaban @ czerasz
git diff stash@{0}
atau akui bahwa menyimpan dan melepaskan tidak cepat dan mudah, lepas saja perubahan dan periksa mereka. Jika Anda tidak ingin mereka membuangnya saat ini (indeks / folder kerja saat ini berubah). Secara penuh itu
git stash apply
git diff
git reset
git checkout
git stash save -u
Ini berfungsi untuk saya di git versi 1.8.5.2:
git diff stash HEAD
git stash apply
.
Jika Anda memiliki alat untuk diff (seperti luar biasa)
git difftool stash HEAD
git stash apply
.
HEAD
. Saya bisa memodifikasi jawaban @ yerlilbilgin untuk menghapus HEAD tapi saya pikir siapa pun yang menggunakan git dapat mengetahui bagian itu dan saya memperpanjang jawaban akan membuatnya kurang mudah dibaca. Jangan salahkan @yerlibilgin.
Salah satu cara untuk melakukan ini tanpa memindahkan apa pun adalah dengan mengambil keuntungan dari fakta yang patch
dapat membaca git diff (unified diffs pada dasarnya)
git stash show -p | patch -p1 --verbose --dry-run
Ini akan menunjukkan kepada Anda pratinjau langkah demi langkah tentang apa yang biasanya dilakukan patch. Manfaat tambahan untuk ini adalah bahwa tambalan tidak akan mencegah dirinya dari menulis tambalan ke pohon kerja baik, jika karena alasan tertentu Anda hanya perlu git untuk tutup mulut tentang melakukan-sebelum-memodifikasi, silakan dan hapus --dry- jalankan dan ikuti instruksi verbose.
Menggabungkan apa yang saya pelajari di utas ini dan di utas ini , ketika saya ingin melihat "apa yang ada di dalam simpanan", saya pertama kali menjalankan:
git stash show stash@{0}
Itu akan menunjukkan file apa yang dimodifikasi. Lalu, untuk mendapatkan diff visual yang bagus di difftool, saya lakukan:
git difftool --dir-diff stash@{0} stash@{0}^
Ini akan menampilkan semua perbedaan sekaligus dari simpanan yang diberikan terhadap induknya.
Anda dapat mengkonfigurasi alat diff di ~/.gitconfig
, misalnya dengan Meld :
...
[diff]
tool = meld
FWIW Ini mungkin sedikit berlebihan untuk semua jawaban lain dan sangat mirip dengan jawaban yang diterima yang tepat; tapi mungkin itu akan membantu seseorang.
git stash show --help
akan memberikan semua yang Anda butuhkan; termasuk info acara simpanan.
tampilkan [<stash>]
Perlihatkan perubahan yang direkam dalam simpanan sebagai perbedaan antara status simpanan dan induk aslinya. Ketika tidak diberikan, tunjukkan yang terbaru. Secara default, perintah ini menunjukkan diffstat, tetapi ia akan menerima format apa pun yang dikenal dengan git diff (misalnya, git stash show -p stash @ {1} untuk melihat simpanan terbaru kedua dalam bentuk tambalan). Anda dapat menggunakan variabel konfigurasi stash.showStat dan / atau stash.showPatch untuk mengubah perilaku default.
Dia daftar simpanan
git stash list
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
Jadi dapatkan nomor simpanan dan lakukan:
Anda dapat melakukan:
git stash show -p stash@{1}
Tetapi jika Anda ingin diff (ini berbeda untuk menunjukkan simpanan, itu sebabnya saya menulis jawaban ini. Diff
Pertimbangkan kode saat ini di cabang Anda dan show
hanya tunjukkan apa yang akan Anda terapkan )
Kamu bisa menggunakan:
git diff stash@{0}
atau
git diff stash@{0} <branch name>
Hal lain yang menarik untuk dilakukan adalah:
git stash apply
git stash apply stash@{10}
Ini berlaku simpanan tanpa menghapusnya dari daftar, Anda dapat git checkout .
menghapus perubahan itu atau jika Anda senanggit stash drop stash@{10}
menghapus simpanan dari daftar.
Dari sini saya tidak pernah merekomendasikan untuk menggunakan git stash pop
dan menggunakan kombinasi dari git stash apply
dan git stash drop
Jika Anda menerapkan simpanan di cabang yang salah ... well kadang-kadang sulit untuk memulihkan kode Anda.
Bergantung pada apa yang Anda ingin membandingkan simpanan dengan (pohon kerja lokal / komit induk / komit kepala), sebenarnya ada beberapa perintah yang tersedia, di antaranya yang lama baik git diff
, dan yang lebih spesifik 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 ║ / ║
╚══════════════════════╩═══════════════════════════════╩═══════════════════╝
Meskipun git stash show
terlihat lebih ramah pengguna pada pandangan pertama, git diff
sebenarnya lebih kuat karena memungkinkan menentukan nama file untuk diff yang lebih fokus. Saya pribadi mengatur alias untuk semua perintah ini di plugin zsh git saya .