Như đã nói ở nơi khác, câu trả lời là git add
tập tin. ví dụ:
git add path/to/untracked-file
git stash
Tuy nhiên, câu hỏi cũng được nêu ra trong một câu trả lời khác: Điều gì xảy ra nếu bạn không thực sự muốn thêm tệp? Vâng, như tôi có thể nói, bạn phải. Và sau đây sẽ KHÔNG hoạt động:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
Điều này sẽ thất bại, như sau:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Vậy, bạn có thể làm gì? Chà, bạn phải thực sự thêm tệp, tuy nhiên , bạn thực sự có thể hủy thêm nó sau, với 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
Và sau đó bạn có thể tiếp tục làm việc, ở trạng thái giống như trước đây git add
(cụ thể là với một tệp chưa được mã hóa được gọi path/to/untracked-file
; cộng với bất kỳ thay đổi nào khác mà bạn có thể phải theo dõi các tệp).
Một khả năng khác cho quy trình làm việc về điều này sẽ là một cái gì đó như:
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
[Lưu ý: Như đã đề cập trong một nhận xét từ @mancocapac, bạn có thể muốn thêm --exclude-standard
vào git ls-files
lệnh (vì vậy, git ls-files -o --exclude-standard
).]
... cũng có thể dễ dàng viết kịch bản - ngay cả các bí danh cũng được thực hiện (được trình bày theo cú pháp zsh; điều chỉnh khi cần thiết) [tôi cũng rút ngắn tên tệp để tất cả khớp với màn hình mà không cuộn trong câu trả lời này; vui lòng thay thế một tên tệp thay thế mà bạn chọn]:
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'
Lưu ý rằng cái sau có thể tốt hơn như là một tập lệnh shell hoặc hàm, để cho phép các tham số được cung cấp cho git stash
, trong trường hợp bạn không muốn pop
nhưng apply
, và / hoặc muốn có thể chỉ định một ngăn cụ thể, thay vì chỉ lấy đầu một. Có lẽ điều này (thay vì bí danh thứ hai, ở trên) [khoảng trắng bị tước để phù hợp mà không cần cuộn; thêm lại để tăng mức độ dễ đọc]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Lưu ý : Trong biểu mẫu này, bạn cần cung cấp một đối số hành động cũng như mã định danh nếu bạn sẽ cung cấp một mã định danh stash, ví dụ unstashall apply stash@{1}
hoặcunstashall pop stash@{1}
Tất nhiên những gì bạn đặt vào .zshrc
hoặc tương đương để tồn tại lâu dài.
Hy vọng câu trả lời này hữu ích cho ai đó, kết hợp tất cả mọi thứ lại với nhau trong một câu trả lời.
git stash show
trả về không có gì và bạn có thể bị bỏ rơi nó (như tôi đã làm trong khi nó chứa một tập lệnh hữu ích tôi đã viết cách đây vài tháng → cách phục hồi stash bị rơi )