2016-11-17 13 views
5

Tôi đã sử dụng PhpStorm và gần đây đã lưu trữ một loạt các thay đổi của tôi. Sau đó, hồ sơ PC của tôi bị hỏng và phải được xây dựng lại.Đâu là Git Stashes được lưu trữ?

Bây giờ tôi có cấu hình PC mới, PhpStorm không hiển thị các thay đổi đã lưu trữ của tôi.

Có cách nào để tôi có thể lấy lại chúng không?

+2

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

+1

Đó là nó. Bây giờ tôi có các tệp. Cảm ơn – Typhoon101

Trả lời

8

Từ tài liệu, tài liệu mới nhất được lưu trữ trong ./.git/refs/stash trong khi các tài liệu cũ hơn nằm trong số reflog của số ref đó.

Như một sang một bên, tôi đã phát hiện ra rằng thực hành không tốt để duy trì việc sử dụng git stash thường xuyên. Nói chung, bạn thích nhiều cam kết nhỏ hơn trên một nhánh tính năng. Bằng cách này bạn hiếm khi phải stash và khi bạn làm nó rất ít được lưu trữ như vậy. Tôi thường chỉ stash khi tôi cần phải chạm vào một cái gì đó đi trong một vài phút, và sau đó áp dụng khi tôi đang thực hiện nhìn vào một cái gì đó.

https://git-scm.com/docs/git-stash

1

Tất cả đều được lưu trữ trong .git/refs/stash. git stash lưu các dấu gạch ngang vô thời hạn và tất cả chúng được liệt kê theo git stash list.

Xin lưu ý rằng việc thả hoặc xóa dấu gạch chéo sẽ xóa nó khỏi danh sách stash, nhưng bạn vẫn có thể có các nút không được tìm kiếm với dữ liệu đúng nằm xung quanh.

3

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.

Các vấn đề liên quan