File yang tidak dilacak disimpan di induk ketiga dari komit simpanan. (Ini sebenarnya tidak didokumentasikan, tetapi cukup jelas dari Komit yang memperkenalkan fitur -u, 787513 ... , dan cara dokumentasi lainnya untukgit-stash
hal-hal frase ... atau hanya dengan melakukan git log --graph stash@{0}
)
Anda hanya dapat melihat bagian "tidak terlacak" dari simpanan melalui:
git show stash@{0}^3
atau, hanya pohon "tidak terlacak" itu sendiri, melalui:
git show stash@{0}^3:
atau, file "tidak terlacak" tertentu di pohon, melalui:
git show stash@{0}^3:<path/to/file>
Sayangnya, tidak ada cara yang baik untuk mendapatkan ringkasan perbedaan antara semua status bertahap + tidak bertahap + tidak terlacak vs "saat ini". yaitu: git show stash@{0}
tidak dapat dibuat untuk menyertakan file yang tidak terlacak. Ini karena objek pohon dari komit simpanan itu sendiri, yang disebut stash@{0}:
, tidak menyertakan perubahan apa pun dari induk "tidak bertingkat" yang ketiga.
Hal ini disebabkan cara penyimpanan kembali diterapkan: file terlacak dapat dengan mudah diterapkan sebagai patch, sedangkan file yang tidak terlacak hanya dapat diterapkan, secara teori, sebagai "file utuh".
git stash show
tampaknya memperlihatkan perbedaan antara copy pekerjaan dan # 1 (kode yang relevan dari git-stash.sh:,git diff ${FLAGS:---stat} $b_commit $w_commit
di mana $ b_commit adalah # 1 dan $ w_commit adalah komit simpanan); apakah ada cara built-in untukgit stash show
menyertakan # 3?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.
) jika Anda sebenarnya tidak memiliki file yang tidak terlacak di simpanan itu (tetapi Anda pikir Anda melakukannya).git stash show
tidak tidak menampilkan file tidak terlacak (berlaku untuk setidaknya git 2.7.4):git stash pop
pertama-tama akan mencoba memulihkan file yang tidak terlacak, kemudian mencoba memulihkan file yang terlacak. Jika operasi terakhir gagal (mis. Konflik), operasi pertama tidak dibatalkan (untracked-file-stash akan tetap apa adanya tetapi file tidak dihapus dari disk), jadi meskipun Anda memperbaiki konflik, pop berikutnya akan gagal bagaimanapun.Anda dapat membuat daftar semua komit simpanan dengan perintah berikut:
Karena simpanan direpresentasikan sebagai komit gabungan 3 arah dari HEAD, indeks, dan komit "root" tanpa induk dari file yang tidak terlacak, simpanan file yang tidak terlacak dapat dicantumkan dengan memasukkan keluaran di atas ke dalam berikut:
Aplikasi berguna di atas:
Tampilkan hanya file yang tidak terlacak dan disimpan
Tentu saja, hapus
--stat
untuk melihat konten file.Temukan file tertentu
Grep file yang tidak terlacak
Buat daftar semua konten dari semua simpanan
sumber
Untuk mencantumkan file yang tidak terlacak di simpanan:
Untuk menampilkan perbedaan lengkap dari semua file yang tidak terlacak (dengan konten):
Perintah ini membaca simpanan terakhir (terbaru). Untuk simpanan sebelumnya, tambah angka di belakang "simpanan @", misalnya
stash@{2}
untuk simpanan kedua dari simpanan terakhir.Alasan ini berfungsi adalah karena
git stash
membuat komit gabungan untuk setiap simpanan, yang dapat dirujuk sebagaistash@{0}
,stash@{1}
dll. Orang tua pertama dari komit ini adalah HEAD pada saat penyimpanan, induk kedua berisi perubahan pada file yang dilacak, dan ketiga (yang mungkin tidak ada) perubahan pada file yang tidak terlacak.Ini sebagian dijelaskan dalam halaman manual di bawah "Diskusi" .
sumber
Untuk melihat semua file di simpanan (baik dilacak maupun tidak terlacak), saya menambahkan alias ini ke konfigurasi saya:
Ini membutuhkan satu argumen simpanan mana yang ingin Anda lihat. Perhatikan bahwa ini akan tetap menampilkannya dalam dua daftar back-to-back.
The
if...fi
Bagian perubahan bash argumen $ 1 ke 0 jika tidak ada disahkan.sumber
Solusi: Menentukan file sebelum menyimpannya akan
git stash show -p
berfungsi seperti yang diharapkan.Catatan: Cara ini memberi kekuatan menambahkan bagian interaktif juga, begini caranya .
Perhatian: Pastikan Anda tidak memiliki pekerjaan bertahap, atau Anda tidak akan dapat membedakannya.
Ini mungkin berguna.
sumber