2011-12-19 22 views
7

Sau lần cam kết cuối cùng của tôi, tôi đã viết một loạt mã. Trước khi cam kết lần nữa, tôi chạy hg add. Nó thêm một số tác phẩm tôi đã không quan tâm đến, vì vậy tôi chạyThay đổi của tôi có thay đổi sau "hg hoàn nguyên" không?

$ hg revert --all 

nghĩ rằng tất cả các tập tin bổ sung sẽ biến mất. Họ đã biến mất, nhưng tôi cũng đã hoàn nguyên tất cả các mã được viết kể từ lần commit cuối cùng, có nghĩa là một tấn công việc đã bị mất! Những lựa chọn của tôi là gì?

Trả lời

12

Khi bạn hg revert một tệp (hoặc --all tệp), Mercurial lưu bản sao lưu của tệp dưới tên khác. Điều này khiến bạn khó làm việc hơn. Nếu tệp được gọi là foo, bạn sẽ có foo.orig với phiên bản gốc.

Bạn có thể sử dụng

$ hg status --all --include "**.orig" 

để xem tất cả các .orig tập tin trong bản sao làm việc của bạn. Di chuyển những thứ bạn cần trở lại, thêm lại và cam kết.

Lưu ý liên quan: đôi khi người ta thêm cờ --no-backup vào phần [defaults] của mình để loại bỏ các tệp .orig Phân tán Mercurial xung quanh. Tôi nghĩ rằng đây là một ý tưởng thực sự xấu ... chỉ cần bỏ qua các .orig file thay vì bằng cách thêm

syntax: glob 
*.orig 

đến file .hgignore của bạn. Đó là an toàn hơn nhiều và một ngày bạn sẽ được hạnh phúc mà bạn có những tập tin .orig nằm xung quanh :-)

+3

cảm ơn chúa. oh và bạn cũng martin :-) – Rahul

+0

Khi bạn "di chuyển những cái bạn cần, hãy thêm lại chúng và cam kết" bạn nên đổi tên foo.txt.orig thành foo.txt theo cách thủ công cho mỗi tệp hay có cách nào tốt hơn không ? –

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