Stash adalah komit gabungan khusus dari pohon kerja antara komit dasar dan indeks. Salah satu caranya adalah dengan menyimpan masing-masing sebagai tambalan terpisah, checkout simpanan induk pertama, pulihkan indeks dan susunan pohon dari dua tambalan dan akhirnya pulihkan simpanan (sepertinya satu jawaban berjalan seperti ini).
Ini diperlukan untuk sepenuhnya menciptakan kembali semua informasi dari simpanan, dan jika Anda tidak peduli tentang itu Anda harus setidaknya memeriksa induk pertama simpanan sebelum memulihkan untuk menghindari konflik dan melacak di mana simpanan dibuat.
Inilah yang saya lakukan untuk sepenuhnya memulihkan semua simpanan dari satu repo ke repo lainnya. Jika Anda tidak dapat memilikinya di komputer yang sama, Anda dapat menyimpan tag simpanan dalam bundel setelah membuatnya dan menyalin daftar referensi dan bundel ke komputer target.
Dari akar repo asli:
- Dapatkan daftar referensi simpanan
- Tandai referensi simpanan Anda sehingga Anda dapat mengambilnya dengan git fetch (nama tag tidak mater, ubah jika ada konflik. Saya menggunakan
stash_ + nomor pada ref simpanan logis)
- Konversi referensi logis ke hasa sha1 dalam urutan terbalik - kita akan menggunakannya nanti
- Simpan jalur repo itu - juga untuk nanti
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
NB: Ini membutuhkan bash atau shell yang kompatibel (ksh, zsh seharusnya melakukan ...) Anda juga bisa menambahkan variabel, misal stash_$((i++))jika shell Anda tidak mendukung${param//pattern}
Sekarang di repo baru, untuk setiap ref:
- Ambil ref dari repo yang lama (kita bahkan tidak perlu menggunakan nama tag, karena kita telah memberi tag kita, kita dapat mengambilnya dengan git fetch)
- Impor ulang simpanan dari ref, menggunakan subjek ref sebagai pesan simpanan.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash savesekarang tidak digunakan lagi untukgit stash push