Git menyimpan tampaknya melakukan banyak hal yang saya inginkan, kecuali bahwa itu agak sulit untuk skrip, karena jika Anda tidak memiliki perubahan, maka git stash; git stash pop
akan melakukan sesuatu yang berbeda daripada jika Anda memiliki perubahan dalam repositori Anda.
Tampaknya itu git stash create
adalah jawaban untuk masalah itu, dan semuanya bekerja, kecuali untuk satu hal ... Saya tidak bisa menghilangkan simpanan yang dibuat. Apakah ada cara untuk menghilangkan simpanan?
Untuk memperjelas 100% apa yang saya lakukan:
Buat simpanan:
~/tmp/a(master) $ git stash create
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message
Gunakan simpanan:
~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
Hapus simpanan: (kecuali bahwa bit terakhir ini tidak berfungsi)
~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference
git apply
perjalanan di kotak kode kedua pada saat penulisan ini tidak menerapkan tambalan — pesan kesalahan dalam output memberi tahu Anda hal ini. Jadi sebenarnya, Anda mencoba untuk membuat simpanan (yang tidak berfungsi, lihat komentar di bawah) menerapkan simpanan yang tidak dibuat kemudian jatuhkan simpanan yang tidak bisa dibuat. Inilah sebabnya mengapa tidak ada yang berhasil.git stash apply
itu berhasil. Thegit apply
upaya untuk membaca file patch lokal, yang tidak ada. Sejujurnya, mungkin tidak seharusnya ada di sana, dan itu tidak akan pernah berhasil. Saya agak tergoda untuk menghapusnya dari pertanyaan, tetapi mengingat bahwa ia telah membantu begitu banyak dalam bentuknya saat ini, saya akan membiarkannya apa adanya.Jawaban:
Untuk menghapus simpanan normal yang dibuat dengan
git stash
, Anda ingingit stash drop
ataugit stash drop stash@{n}
. Lihat di bawah untuk detail lebih lanjut.Anda tidak perlu menghapus simpanan yang dibuat dengan
git stash create
. Dari dokumen:Karena tidak ada referensi yang dilakukan simpanan, akhirnya sampah akan dikumpulkan.
Sebuah simpanan dibuat dengan
git stash
ataugit stash save
disimpan kerefs/stash
, dan dapat dihapus dengangit stash drop
. Seperti halnya semua objek Git, isi simpanan aktual tidak dihapus dari komputer Anda sampaigc
memangkas objek-objek tersebut setelah kedaluwarsa (standarnya adalah 2 minggu kemudian).Stash lama disimpan di
refs/stash
reflog (cobacat .git/logs/refs/stash
), dan dapat dihapus dengangit stash drop stash@{n}
, di manan
nomor ditunjukkan olehgit stash list
.sumber
git stash
- saya tidak tahu apakah itu benar-benar petagit stash create
atau sesuatu yang lain. Git tentu adalah sesuatu yang masih saya pelajari (jika tidak, saya tidak akan membaca SO Q & As seperti ini.)git stash create
untuk digunakan . Daripada menyimpan dalam file tambalan waktu yang dicentang, Anda mungkin membiarkan reflog git menyimpannya untuk Anda dalam referensi khusus (misrefs/backup
.). Saya akan mencoba sesuatu seperti 1)git stash create
, 2) membandingkan pohon simpanan baru denganrefs/backup^{tree}
, 3) jika pohonnya berbedagit update-ref --create-reflog refs/backup <stash-sha>
,. Akhirnya simpanan cadangan yang lama akan dipangkas secara otomatis.git stash drop
tidak mengambil parameter - yang menjatuhkan simpanan teratas - atau referensi simpanan yang terlihat seperti:stash@{n}
yangn
menominasikan simpanan mana yang akan dibuang. Anda tidak dapat meneruskan id komit kegit stash drop
.Menjatuhkan simpanan akan mengubah para
stash@{n}
sebutan semua stashes lebih bawah tumpukan.Saya tidak yakin mengapa Anda berpikir perlu menghapus simpanan karena jika Anda menggunakan
stash create
entri simpanan tidak dibuat untuk "simpanan" Anda, maka tidak ada apa pun untuk dibuang.sumber
Jika Anda 100% yakin bahwa Anda hanya memiliki satu simpanan atau Anda ingin menghapus semua simpanan (pastikan
git stash list
107% yakin), Anda dapat melakukan:..dan lupakan mereka (menghapus semua simpanan).
Catatan: Menambahkan jawaban ini untuk mereka yang berakhir di sini mencari cara untuk menghapus semuanya (seperti saya).
sumber
git stash drop
, karena simpanan hanya setetes, dan Anda tidak perlu khawatir kehilangan lebih dari yang diharapkan.git stash drop
seperti biasa. Saya tidak yakin apa yang saya lakukan berbeda. Bagaimanapun,git stash clear
bekerja untuk saya. Tidak tahu itu ada. +1Dari git doc: http://git-scm.com/docs/git-stash
Hapus satu status simpanan dari daftar simpanan. Ketika tidak diberikan, itu menghapus yang terbaru. yaitu
stash@{0}
, sebaliknya harus menjadi referensi simpanan valid dari form simpanan @ {}.contoh:
Ini akan menghapus entri simpanan 5. Untuk melihat semua daftar simpanan:
sumber
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}
sebelum mengeksekusigit stash drop
. Percayalah, ini akan menghemat banyak masalah :)Anda harus menggunakan
dan tidak
karena ini menciptakan simpanan (yang merupakan objek komit reguler) dan mengembalikan nama objeknya, tanpa menyimpannya di mana pun di ruang nama ref. Karenanya tidak akan dapat diakses dengan simpanan berlaku.
Gunakan
git stash save "some comment"
digunakan ketika Anda memiliki perubahan unstaged Anda ingin mereplikasi / pindah ke cabang lainGunakan
git stash apply stash@{0}
(dengan asumsi indeks simpanan simpanan Anda adalah 0) saat Anda menginginkan perubahan simpanan (simpanan) Anda tercermin pada cabang Anda saat iniAnda selalu dapat menggunakan
git stash list
untuk memeriksa semua indeks simpanan Andadan gunakan
git stash drop stash@{0}
(dengan asumsi indeks simpanan simpanan Anda adalah 0 dan Anda ingin menghapusnya) untuk menghapus simpanan tertentu.sumber
git stash
default kegit stash save
git stash create
dimaksudkan untuk digunakan oleh skrip. Itu kasus penggunaan OP. Jadi, merekomendasikangit stash save
mungkin berguna untuk penggunaan "normal", tetapi tidak untuk kasus penggunaan OP. OP mungkin ingin melihat pada dokumen : ada lebih banyak perintah yang terkait dengan scripting, misalnyagit stash store
git stash save "message"
sekarang harus membacagit stash push -m "message"
. Bandingkangit commit -m "message"
Ini juga berfungsi
Suka
sumber
Dokumen ada di sini (dalam bahasa Cina) silakan klik.
kamu bisa menggunakan
sumber
git stash create
berbeda dengangit stash save
, khususnya, formulir buat tidak muncul dalam daftar, dan tidak bisa dijatuhkan, maka pertanyaannya.sumber