2013-05-17 35 views
99

Tôi có một số tệp không được tìm thấy trong git. Tôi đã thực hiện một số thay đổi và muốn cam kết, nhưng nhận ra tôi đã quên kiểm tra các tệp chưa được sửa đổi trước. Vì vậy, tôi đã lưu trữ các tệp, sau đó thêm các phiên bản chưa sửa đổi.Git stash để ghi đè lên các tệp đã thêm

Sau đó, khi tôi áp dụng stash vào kho, tôi nhận được xung đột do các tệp đã được thêm.

Làm cách nào để áp dụng dấu gạch chéo và buộc các phiên bản trong stash được sử dụng tùy thuộc vào bản gốc trong kho lưu trữ?

Cảm ơn

+1

giải pháp Ugly cho đến khi ai đó đi lên với một tốt hơn: loại bỏ các tập tin mới sử dụng 'git rm' trước khi làm 'git stash áp dụng'. – tom

+0

Sẽ không mất lịch sử? Lý do để thêm các phiên bản chưa được sửa đổi là để giữ cho lịch sử. – Stefan

+0

Không, nó sẽ không mất lịch sử. Nếu bạn loại bỏ một tập tin, thêm nó trở lại với một sửa đổi nhỏ, và sau đó cam kết, 'git' sẽ coi nó như là một sửa đổi nhỏ. – tom

Trả lời

173

Sử dụng git checkout thay vì git stash apply:

$ git checkout stash -- . 
$ git commit 

này sẽ khôi phục lại tất cả các file trong thư mục hiện lên phiên bản cất giấu của họ.


Nếu có sự thay đổi các file khác trong thư mục làm việc cần được lưu giữ, đây là một lựa chọn ít nặng tay:

$ git merge --squash --strategy-option=theirs stash 

Nếu có sự thay đổi trong chỉ mục, hoặc hợp nhất sẽ chạm vào các tệp có thay đổi cục bộ, git sẽ từ chối hợp nhất. Những file riêng lẻ có thể được kiểm tra ra khỏi stash sử dụng

$ git checkout stash -- <paths...> 

hoặc tương tác với

$ git checkout -p stash 
+0

Cảm ơn tom này thực sự đã giúp hai chúng tôi trong ngày hôm nay! – Chad

+0

Không ai trong số này hoạt động trong trường hợp sử dụng của tôi. Các kết quả và giải pháp của tôi ở đây http://stackoverflow.com/a/26685296/496046 - điều này cũng sẽ giải quyết được tình huống của bạn, @AlexanderBird – tremby

+1

'git checkout stash - .' Lệnh này thực sự không làm gì khi tôi chạy nó. –

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