Saya selalu mendapat kesan bahwa Anda bisa memberi simpanan nama dengan melakukan git stash save stashname
, yang nantinya bisa Anda lakukan dengan melakukan git stash apply stashname
. Tetapi tampaknya dalam hal ini semua yang terjadi adalah yang stashname
akan digunakan sebagai deskripsi simpanan.
Apakah tidak ada cara untuk benar-benar menamai simpanan? Jika tidak, apa yang akan Anda rekomendasikan untuk mencapai fungsi yang setara? Pada dasarnya saya memiliki simpanan kecil yang ingin saya terapkan secara berkala, tetapi tidak ingin selalu harus mencari git stash list
nomor simpanan sebenarnya.
git stash push -m stashname
adalah sintaks saat ini .git stash save stashname
telah ditinggalkan.Jawaban:
Inilah cara Anda melakukannya:
Di mana
"my_stash"
nama simpanan.Beberapa hal yang lebih berguna untuk diketahui: Semua simpanan disimpan dalam tumpukan. Tipe:
Ini akan mencantumkan semua simpanan Anda.
Untuk menerapkan simpanan dan menghapusnya dari tumpukan simpanan, ketik:
Untuk menerapkan simpanan dan menyimpannya di tumpukan simpanan, ketik:
Di mana
n
indeks perubahan disimpan.sumber
git stash apply <custom-name>
git stash push -m my_stash
adalah sintaks saat ini .git stash save my_stash
telah ditinggalkan.git stash save
sudah usang pada 2.15.x / 2.16, sebagai gantinya Anda dapat menggunakangit stash push -m "message"
Anda bisa menggunakannya seperti ini:
git stash push -m "message"
di mana "message" adalah catatan Anda untuk simpanan itu.
Dalam rangka untuk mengambil simpanan Anda dapat menggunakan:
git stash list
. Ini akan menampilkan daftar seperti ini, misalnya:Maka Anda cukup menggunakan
apply
memberi itustash@{index}
:Referensi man page simpanan git
sumber
push
daripadasave
sintaks: git stash pushgit stash push
: stackoverflow.com/a/47231547/6309git stash apply stash@{1}
di Powershell Anda akan mendapatkanerror: unknown switch 'e'
kembali. Alih-alih menggunakangit stash apply --index 1
ataugit stash apply 'stash@{1}'
atau melarikan diri}
dan{
dengan backtick `.Anda dapat mengubah simpanan menjadi cabang jika Anda merasa itu cukup penting:
dari halaman manual:
Ini membuat dan memeriksa cabang baru bernama
<branchname>
mulai dari komit di mana<stash>
awalnya dibuat, menerapkan perubahan yang tercatat di<stash>
pohon dan indeks kerja yang baru, kemudian menjatuhkan<stash>
jika itu berhasil selesai. Ketika tidak<stash>
diberikan, terapkan yang terbaru.Ini berguna jika cabang tempat Anda berlari
git stash save
telah cukup berubah sehingga git stash berlaku gagal karena konflik. Karena simpanan diterapkan di atas komit yang HEAD pada saat simpanan git dijalankan, simpanan memulihkan kondisi simpanan semula tanpa konflik.Anda nanti dapat rebase cabang baru ini ke tempat lain yang merupakan keturunan di mana Anda berada saat Anda simpanan.
sumber
git stash apply
)git stash push -m 'name'
bekerja.Jika Anda hanya mencari cara yang ringan untuk menyimpan sebagian atau semua perubahan copy pekerjaan Anda saat ini dan kemudian menerapkannya kembali nanti, pertimbangkan file patch:
Sesekali saya bertanya-tanya apakah saya harus menggunakan simpanan untuk ini dan kemudian saya melihat hal-hal seperti kegilaan di atas dan saya puas dengan apa yang saya lakukan :)
sumber
Stash tidak dimaksudkan untuk menjadi hal yang permanen seperti yang Anda inginkan. Anda mungkin akan lebih baik dilayani menggunakan tag saat melakukan. Bangun benda yang ingin Anda sembunyikan. Buat komitmen darinya. Buat tag untuk komit itu. Kemudian putar kembali cabang Anda ke
HEAD^
. Sekarang ketika Anda ingin mengajukan permohonan kembali bahwa simpanan Anda dapat menggunakangit cherry-pick -n tagname
(-n
adalah--no-commit
).sumber
named commit
nongkrong di suatu tempat. Hanya gangguan ringan adalah bahwa hal itu tidak dilakukan pada cherry pick dan tetap di diff, yang berarti harus secara manual tidak diperiksa selama komit berikutnya.--no-stage
opsi! Terkait: stackoverflow.com/questions/32333383/…gunakan
git stash push -m aNameForYourStash
untuk menyimpannya. Kemudian gunakangit stash list
untuk mempelajari indeks simpanan yang ingin Anda terapkan. Kemudian gunakangit stash pop --index 0
untuk menghapus simpanan dan menerapkannya.Catatan: Saya menggunakan git versi 2.21.0.windows.1
sumber
git stash {push,save}
Saya memiliki dua fungsi ini di
.zshrc
file saya :Menggunakannya dengan cara ini:
sumber
Bagaimana dengan ini?
sumber
git stash apply stash^{/<regex>}
tidak bekerja (tidak sebenarnya mencari simpanan, lihat komentar di bawah jawaban yang diterima ).git stash list
yang menunjukkan saya simpanan beserta nomor indeks terkait saya kemudian pergi 2.git stash apply 0
- di mana 0 adalah nomor indeks saya akan mencari dari perintah pertamaAlias
sapply = "!f() { git stash apply \"$(git stash list | awk -F: --posix -vpat=\"$*\" \"$ 0 ~ pat {print $ 1; exit}\")\"; }; f"
Pemakaian
git sapply "<regex>"
Sunting: Saya berpegang teguh pada solusi asli saya, tetapi saya melihat mengapa mayoritas lebih suka versi Etan Reisner (di atas). Jadi hanya sebagai catatan:
sumber
awk -F: '{print $1}'
akan menghilangkan kebutuhan untuk sed sepenuhnya. Juga mengapa membungkus ini dalam suatu fungsi? Dan menggunakanawk -F: -vpat="$*" '$0 ~ pat {print $1}'
harus memungkinkan menjatuhkan grep juga. Meskipun mungkin memerlukan penawaran yang sedikit berbeda untuk polanya.{print $1; exit}
untuk berhenti setelah baris pertama yang cocok.Sangat disayangkan itu
git stash apply stash^{/<regex>}
tidak bekerja (itu tidak benar-benar mencari daftar simpanan, lihat komentar di bawah jawaban yang diterima ).Berikut adalah pengganti drop-in yang mencari
git stash list
dengan regex untuk menemukan yang pertama (terbaru)stash@{<n>}
dan kemudian meneruskannya kegit stash <command>
:Perhatikan bahwa kode hasil yang tepat dikembalikan sehingga Anda dapat menggunakan perintah ini dalam skrip lain. Ini dapat diverifikasi setelah menjalankan perintah dengan:
Hanya berhati-hati tentang eksploitasi ekspansi variabel karena saya tidak yakin tentang
--grep=$1
porsinya. Mungkin seharusnya--grep="$1"
tetapi saya tidak yakin apakah itu akan mengganggu pembatas regex (saya terbuka untuk saran).sumber
Jawaban ini berhutang banyak pada Klemen Slavič. Saya hanya akan mengomentari jawaban yang diterima tetapi saya belum memiliki cukup perwakilan :(
Anda juga bisa menambahkan alias git untuk menemukan simpanan ref dan menggunakannya di alias lain untuk menunjukkan, menerapkan, menjatuhkan, dll.
Perhatikan bahwa alasan
ref=$( ... ); echo ${ref:-<no_match>};
pola ini adalah agar string kosong tidak dikembalikan yang akan menyebabkan sshow, sapply, dan sdrop untuk menargetkan simpanan terbaru alih-alih gagal seperti yang diharapkan.sumber
Alias Ini mungkin sintaks yang lebih langsung untuk sistem mirip Unix tanpa perlu merangkum dalam suatu fungsi. Tambahkan berikut ini ke ~ / .gitconfig di bawah [alias]
Penggunaan: regex sapply
Contoh: git sshow MySecretStash
Tanda hubung di bagian akhir mengatakan ambil input dari input standar.
sumber
Gunakan skrip bash kecil untuk mencari nomor simpanan. Sebut saja "gitapply":
Pemakaian:
... di mana foo adalah substring dari nama simpanan yang Anda inginkan.
sumber
Gunakan
git stash save NAME
untuk menyimpan.Lalu ... Anda dapat menggunakan skrip ini untuk memilih mana yang akan diterapkan (atau pop):
Saya suka bisa melihat nama simpanan dan memilih. Saya juga menggunakan Zshell dan terus terang tidak tahu cara menggunakan beberapa alias Bash di atas;)
Catatan: Seperti kata Kevin, Anda harus menggunakan tag dan ceri-picks sebagai gantinya.
sumber
git stash save
tidak digunakan lagigit stash push
.Ini adalah salah satu cara untuk mencapai ini menggunakan PowerShell:
Lebih detail di sini
sumber
di kulit ikan saya
menggunakan
gsap name_of_stash
sumber
Terlambat ke pesta di sini, tetapi jika menggunakan VSCode, cara cepat untuk melakukannya adalah dengan membuka palet perintah (CTRL / CMD + SHIFT + P) dan ketik "Pop Stash", Anda akan dapat mengambil simpanan Anda dengan nama tanpa perlu menggunakan git CLI
sumber
git stash apply
juga bekerja dengan referensi selainstash@{0}
. Jadi, Anda dapat menggunakan tag biasa untuk mendapatkan nama yang persisten. Ini juga memiliki keuntungan yang tidak dapat Anda sembunyikangit stash drop
ataugit stash pop
tidak.Jadi, Anda dapat mendefinisikan alias
pstash
(alias "persisten simpanan") seperti ini:Sekarang Anda dapat membuat simpanan yang ditandai:
dan
show
danapply
lagi seperti biasa:sumber
Saya tidak berpikir ada cara untuk mendapatkan pop simpanan dengan namanya.
Saya telah membuat fungsi bash yang melakukannya.
Contoh penggunaan:
Saya harap ini membantu!
sumber
Untuk semuanya selain penciptaan simpanan, saya akan mengusulkan solusi lain dengan memperkenalkan fzf sebagai ketergantungan. Saya sarankan untuk mengambil 5 menit dari waktu Anda dan diperkenalkan padanya, karena itu adalah penguat produktivitas yang hebat.
Bagaimanapun, kutipan terkait dari halaman contoh mereka menawarkan pencarian simpanan. Sangat mudah untuk mengubah scriptlet untuk menambahkan fungsionalitas tambahan (seperti aplikasi simpanan atau menjatuhkan):
sumber
Jadi, saya tidak yakin mengapa ada begitu banyak kekhawatiran tentang topik ini. Saya dapat memberi nama simpanan git dengan dorongan dan simpanan yang tidak digunakan, dan saya dapat menggunakan regex untuk menariknya kembali dengan menerapkan:
Metode simpanan Git untuk menggunakan nama untuk diterapkan
Seperti yang telah disebutkan sebelumnya, perintah save sudah tidak digunakan lagi, tetapi masih berfungsi, jadi Anda bisa menggunakan ini pada sistem lama di mana Anda tidak dapat memperbaruinya dengan panggilan push. Berbeda dengan perintah push, -m switch tidak diperlukan dengan save.
Ini adalah Git 2.2 dan Windows 10.
Bukti Visual
Inilah GIF animasi yang indah yang menunjukkan prosesnya.
Urutan peristiwa
GIF berjalan cepat, tetapi jika Anda perhatikan, prosesnya adalah ini:
Apakah ini masuk akal?
Terus terang, saya tidak yakin apa manfaat dari pendekatan ini. Ada nilai dalam memberikan simpanan nama, tetapi tidak pengambilan. Mungkin untuk skrip proses mengesampingkan dan dua belas itu akan sangat membantu, tetapi masih jauh lebih mudah untuk hanya memasukkan simpanan dengan nama.
Bagi saya itu terlihat lebih mudah daripada regex.
sumber