Dữ liệu thực tế được lưu trữ bằng "git stash" (tức là phiên bản hiện tại của cây đang hoạt động và nội dung của .git/index) được lưu trữ dưới dạng hai cây cam kết.
Một cây cam kết chứa ảnh chụp nhanh trạng thái hiện tại của cây đang hoạt động. Có một số bit phức tạp ở đây, xem bên dưới.
Cây cam kết khác, tôi đã nói, được sử dụng để lưu trữ ảnh chụp nhanh nội dung của .git/index tại thời điểm phát hành. Tôi đã không xem xét điều này đủ sâu để hiểu cách dịch được dịch sang người khác.
.git/refs/stash chứa giá trị băm cho cây cam kết mà stash được tạo.
.git/logs/refs/stash chứa một đoạn siêu dữ liệu giống như tiếp tục cập nhật về các dấu gạch ngang trước dấu gạch ngang .git/refs/stash.
.git/index giữ một danh sách các mục nhập, một cho mỗi tệp trong cây đang hoạt động. Các mục đó chứa đường dẫn đầy đủ và tên tệp cũng như siêu dữ liệu được lưu trong bộ nhớ cache về tệp, cả siêu dữ liệu hệ thống tệp và siêu dữ liệu liên quan đến git.
"git add" thêm cả bản sao của tệp vào cửa hàng đối tượng và đặt cờ dàn dựng cho tệp đó bằng .git/index.
Đối với "git stash" để tạo cây cam kết, các tệp đã bị thay đổi (đã chỉnh sửa) nhưng chưa được dàn dựng với "git add" phải được thêm vào cửa hàng đối tượng. "git stash" thực hiện điều này bằng cách tạo một tệp chỉ mục tạm thời.
Nguồn
2017-09-09 19:09:49
Bạn đã xem tài liệu chưa? Stash được lưu cục bộ trong 'refs/stash'. Bạn đã bao giờ nhìn thấy một người nào đó 'stash trên máy tính của bạn? Tôi đoán là không. Bạn đã bao giờ thử đẩy một stash? Điều đó là không thể. Khi bản sao kho lưu trữ cục bộ của bạn biến mất, các dấu gạch ngang của bạn đã biến mất. – DanFromGermany
Đó là nó. Bây giờ tôi có các tệp. Cảm ơn – Typhoon101