Seperti yang telah dikatakan di tempat lain, jawabannya adalah ke git add
file. misalnya:
git add path/to/untracked-file
git stash
Namun, pertanyaannya juga muncul di jawaban lain: Bagaimana jika Anda tidak benar-benar ingin menambahkan file? Sejauh yang saya tahu, Anda harus. Dan berikut ini TIDAK akan bekerja:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
ini akan gagal, sebagai berikut:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Jadi, apa yang bisa kamu lakukan? Nah, Anda harus benar-benar menambahkan file, namun , Anda dapat secara efektif membatalkannya nanti, dengan git rm --cached
:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
Dan kemudian Anda dapat terus bekerja, dalam kondisi yang sama seperti sebelumnya git add
(dengan file yang tidak terpantau disebut path/to/untracked-file
; ditambah perubahan lain yang mungkin harus dilacak file).
Kemungkinan lain untuk alur kerja tentang ini adalah sesuatu seperti:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
[Catatan: Seperti disebutkan dalam komentar dari @mancocapac, Anda mungkin ingin menambahkan --exclude-standard
ke git ls-files
perintah (jadi, git ls-files -o --exclude-standard
).]
... yang juga dapat dengan mudah ditulis - bahkan alias akan melakukannya (disajikan dalam sintaks zsh; sesuaikan sesuai kebutuhan) [juga, saya mempersingkat nama file sehingga semuanya cocok di layar tanpa menggulirkan jawaban ini; jangan ragu untuk mengganti nama file alternatif yang Anda pilih]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
Perhatikan bahwa yang terakhir mungkin lebih baik sebagai skrip atau fungsi shell, untuk memungkinkan parameter diberikan git stash
, jika Anda tidak ingin pop
tetapi apply
, dan / atau ingin dapat menentukan simpanan tertentu, daripada hanya mengambil bagian atas satu. Mungkin ini (bukannya alias kedua, di atas) [spasi kosong dilucuti agar pas tanpa menggulir; tambahkan kembali untuk peningkatan keterbacaan]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Catatan : Dalam formulir ini, Anda perlu memberikan argumen tindakan serta pengidentifikasi jika Anda akan memberikan pengidentifikasi simpanan, misalnya unstashall apply stash@{1}
atauunstashall pop stash@{1}
Yang tentu saja Anda masukkan ke dalam .zshrc
atau setara untuk membuat ada jangka panjang.
Semoga jawaban ini bermanfaat bagi seseorang, menyatukan semuanya dalam satu jawaban.
git stash show
tidak menghasilkan apa-apa dan Anda mungkin tergoda untuk menjatuhkannya (seperti yang baru saja saya lakukan saat berisi skrip berguna yang saya tulis beberapa bulan lalu) → cara memulihkan simpanan yang jatuh )