2015-05-13 16 views
5

Tôi đã sử dụng hg shelve trong một kho lưu trữ, nơi tôi đã có một số thay đổi chưa hoàn thành vì tôi cần chuyển sang một đầu khác và thực hiện các thay đổi không liên quan.Làm cách nào để sửa chữa một kho lưu trữ bị hỏng bởi hg unshelve?

Khi công việc của tôi trên đầu khác được cam kết, tôi đã chuyển về đầu mà tôi đã sử dụng ban đầu hg shelve và chạy lệnh hg unshelve. Đây là kết quả:

$ hg unshelve 
unshelving change 'default' 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 4 changes to 4 files (+1 heads) 
abort: uncommitted changes 
$ hg diff 
warning: ignoring unknown working parent 893e15ecb5b4! 
$ 

Tôi đã chạy hg head trước và sau lệnh unshelve và thấy kết quả giống hệt nhau. Cam kết 893e15ecb5b4 chưa bao giờ tồn tại, tôi không có đầu mối nào Mercurial nhận được nó.

Trong trường hợp có liên quan, tôi đang chạy phiên bản Mercurial 2.8.2 trên Ubuntu 14.04.

Làm cách nào để lấy lại kho lưu trữ ở trạng thái hoạt động và làm cách nào để tôi có thể nhận lại các thay đổi bị hoãn?

Trả lời

6

Các bước sau đây giải quyết những vấn đề đối với tôi:

  1. Sử dụng hg debugsetparents để thay thế phụ huynh hỏng sửa đổi số 893e15ecb5b4 với điều đúng tôi đã cập nhật để trước khi sử dụng unshelve
  2. Bởi vì ở trên đã để lại cho tôi trong một trạng thái mà Mercurial đã quên tất cả các thay đổi cục bộ, tôi đã phải sử dụng hg manifest | tr '\n' '\0' | xargs -0 touch để làm cho nó nhận thấy bất kỳ thay đổi cục bộ nào một lần nữa.
  3. Các thay đổi có thể được thu hồi bằng cách sử dụng patch -p1 < .hg/shelved/default.patch, mà trong trường hợp của tôi đã làm chính xác những gì hg unshelve đáng lẽ phải làm cho tôi ngay từ đầu.
+4

'hg debugrebuildstate' có lẽ là những gì bạn cần thay vì # 2. –

+0

@MarkTolonen Bởi vì nó đơn giản hơn những gì tôi đã làm? Hoặc bởi vì sẽ có thêm thông tin có thể không đồng bộ? Nếu sau này thì thông tin nào sẽ không đồng bộ? – kasperd

+2

Nó buộc Mercurial phải xây dựng lại trạng thái bên trong của nó, vì vậy tôi tưởng tượng nó chính xác hơn. Tôi đã nhận được mẹo từ http://hgtip.com/tips/advanced/2010-04-23-debug-command-tricks/ –

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