Hủy bỏ Git Stash Pop


132

Tôi đã làm một git stash pop và bây giờ tôi có rất nhiều xung đột. Tôi đã cam kết tất cả các mã gần đây của mình trước đó git stash pop, vậy có cách nào để quay lại cam kết cuối cùng và thoát khỏi tất cả các xung đột và mã git stash popđược tiêm không?


Bạn vẫn muốn công việc popped được lưu, hoặc bạn không bao giờ muốn nhìn thấy nó một lần nữa?
jscs

1
Không, tôi không muốn công việc Popped. Tôi đã thực hiện stash như 4 tháng trước và không chắc những gì thậm chí trong đó?
jdog

2
Bạn có quan tâm đến những thứ không được cam kết trước khi đâm không?
Andrew Marshall

Những người 4 tháng trước hay những người hôm nay? Tôi muốn những gì tôi đã có một giờ trước.
jdog

5
Nếu có xung đột khi bạn git stashthì git sẽ không bỏ stash khỏi danh sách. Vì vậy, git reset --hard HEADkhông phá hủy các công việc popped.
jwadsack

Câu trả lời:


188

Điều này đã được hỏi và trả lời trên stackoverflow (xem Cách hoàn nguyên kho lưu trữ Git về một cam kết trước đó? ), Nhưng câu trả lời đơn giản là:

git reset --hard HEAD

Điều này sẽ chăm sóc vấn đề của bạn. Lưu ý rằng điều này loại bỏ tất cả các thay đổi không được cam kết khỏi kho lưu trữ.

Lưu ý rằng nếu có xung đột, stash được bảo tồn. Từ các tài liệu stash :

Áp dụng nhà nước có thể thất bại với xung đột; trong trường hợp này, nó không bị xóa khỏi danh sách stash. Bạn cần giải quyết xung đột bằng tay và gọi git stash dropthủ công sau đó.


1
Điều này sẽ hoàn nguyên repo cục bộ của bạn đến cam kết cuối cùng. Bạn sẽ có thể đẩy tất cả các cam kết của mình (kể từ lần đẩy cuối cùng) mà không gặp vấn đề gì. Nếu nó không hoạt động, sau đó gửi kết quả trở lại câu hỏi trước đó của bạn). Chúc may mắn.
MichaelMilom

28
Nhưng điều này sẽ khiến stash của bạn bị mất
K. Weber

19
@ K.Weber nếu git stash popdẫn đến xung đột, stash sẽ không bị xóa khỏi danh sách stash.
Daiwei

1
Tôi không chắc ai đã nâng cao 'thực sự bạn sẽ không mất công sức của mình', tôi vừa mất của tôi
Anthony

4
Không có nhiều giải pháp imho, vì nó chỉ ra rằng bạn sẽ mất những thay đổi không được cam kết.
Ivan P

4

Đặt lại cũng có thể được gọi trên các tập tin cụ thể:

git reset HEAD <filename>...

Bạn không thể thiết lập lại một tập tin mặc dù. Nhưng bạn có thể hoàn nguyên các thay đổi với thanh toán sau đó:

git checkout -- <filename>...

Bạn stash sẽ được bảo tồn, như được Luke chỉ ra trong câu trả lời của MichaelMilom.

Điều này hữu ích khi bạn không muốn mất các thay đổi cục bộ không cam kết.


0

Nếu bạn không bao giờ muốn nhìn thấy công việc trong stash popped nữa, thì điều này đơn giản như một thiết lập lại cứng:

git reset --hard HEAD

Điều này nói với git bỏ qua thực tế là bạn có các thay đổi không được cam kết trong thư mục làm việc của bạn và đặt thư mục làm việc, khu vực tổ chức và đi đến cam kết mà bạn chỉ định - trong trường hợp này, ĐẦU hiện có, chứa tất cả công việc bạn có Tôi vừa cam kết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.