Như đã đề cập bởi @bentolo, bạn có thể xóa thủ công các tệp mà nó đang phàn nàn, chuyển đổi các nhánh và sau đó thêm lại chúng theo cách thủ công. Nhưng cá nhân tôi thích ở "trong git" hơn.
Cách tốt nhất để làm điều này là chuyển kho lưu trữ thành một chi nhánh. Khi nó là một nhánh, bạn có thể làm việc bình thường trong git bằng cách sử dụng các kỹ thuật / công cụ liên quan đến nhánh thông thường mà bạn biết và yêu thích. Đây thực sự là một kỹ thuật chung hữu ích để làm việc với các kho lưu trữ ngay cả khi bạn không gặp lỗi được liệt kê. Nó hoạt động tốt bởi vì một kho lưu trữ thực sự là một cam kết dưới vỏ bọc (xem PS).
Chuyển đổi kho thành chi nhánh
Phần sau tạo một nhánh dựa trên HEAD khi kho lưu trữ được tạo và sau đó áp dụng kho lưu trữ (nó không cam kết).
git stash branch STASHBRANCH
Làm việc với "chi nhánh lưu trữ"
Những gì bạn làm tiếp theo phụ thuộc vào mối quan hệ giữa kho lưu trữ và chi nhánh mục tiêu của bạn (mà tôi sẽ gọi là ORIGINALBRANCH) hiện đang ở đâu.
Tùy chọn 1 - Rebase stash nhánh bình thường (rất nhiều thay đổi kể từ stash)
Nếu bạn đã thực hiện nhiều thay đổi trong ORIGINALBRANCH của mình, thì tốt nhất bạn nên xử lý STASHBRANCH giống như bất kỳ chi nhánh nào tại địa phương. Cam kết các thay đổi của bạn trong STASHBRANCH, căn cứ lại nó trên ORIGINALBRANCH, sau đó chuyển sang ORIGINALBRANCH và căn cứ lại / hợp nhất các thay đổi STASHBRANCH trên nó. Nếu có xung đột thì xử lý bình thường (một trong những ưu điểm của phương pháp này là bạn có thể nhìn thấy và giải quyết xung đột).
Tùy chọn 2 - Đặt lại nhánh ban đầu để khớp với kho (các thay đổi có giới hạn kể từ kho)
Nếu bạn chỉ lưu trữ trong khi giữ một số thay đổi theo giai đoạn, thì hãy cam kết và tất cả những gì bạn muốn làm là nhận được các thay đổi bổ sung mà bạn có thể làm như sau. Nó sẽ chuyển trở lại nhánh và chỉ mục ban đầu của bạn mà không thay đổi bản sao làm việc của bạn. Kết quả cuối cùng sẽ là các thay đổi kho lưu trữ bổ sung của bạn trong bản sao làm việc của bạn.
git symbolic-ref HEAD refs/heads/ORIGINALBRANCH
git reset
Lý lịch
Dấu gạch chéo là cam kết thích các nhánh / thẻ (không phải bản vá)
Tái bút, Thật là hấp dẫn khi nghĩ về một kho lưu trữ như một bản vá (giống như việc nghĩ về một cam kết như một bản vá) rất hấp dẫn, nhưng một kho lưu trữ thực sự là một cam kết chống lại HEAD khi nó được tạo. Khi bạn áp dụng / bật lên, bạn đang làm điều gì đó tương tự như hái quả anh đào vào chi nhánh hiện tại của bạn. Hãy nhớ rằng các nhánh và thẻ thực sự chỉ là các tham chiếu đến các cam kết, vì vậy theo nhiều cách, các dấu nháy, các nhánh và thẻ chỉ là các cách khác nhau để trỏ đến một cam kết (và lịch sử của nó).
Đôi khi cần ngay cả khi bạn chưa thực hiện thay đổi thư mục làm việc
PPS, Bạn có thể cần đến kỹ thuật này sau khi chỉ sử dụng kho với --patch và / hoặc --bao gồm-chưa được kiểm tra. Ngay cả khi không thay đổi thư mục làm việc, những tùy chọn này đôi khi có thể tạo ra một kho lưu trữ mà bạn không thể áp dụng lại. Tôi phải thừa nhận là không hoàn toàn hiểu tại sao. Xem http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html để thảo luận.