2009-05-25 36 views

Trả lời

4

Tôi đã sử dụng tiện ích mở rộng hg mqueue để chỉnh sửa lịch sử. Dường như nó hoạt động. Cảm ơn tất cả.

+1

ya, http: //mercurial.selenic. com/wiki/EditingHistory cho phép bạn quay lại các bản sửa đổi của bạn và xóa các sửa đổi riêng lẻ hoặc thực hiện các thay đổi (xóa mật khẩu) trong các bản sửa đổi của bạn – xster

34

Mercurial cố gắng hết sức để giữ cho dữ liệu của bạn an toàn, vì vậy bạn thường không thể thay đổi lịch sử.

Điều đó đang được nói, có nhiều tiện ích mở rộng cho Mercurial cho phép bạn dễ dàng thay đổi lịch sử. Có một số page on the wiki about editing history. Trang đó cũng giải thích hậu quả.

Trong trường hợp cụ thể của bạn, bạn phải tự hỏi bản thân xem liệu người khác có đã kéo bộ thay đổi của bạn không? Nếu vậy, sau đó ngay cả khi bạn loại bỏ nó, nó vẫn sẽ tồn tại trong bản sao của họ và bạn có thể tốt hơn với chấp nhận sai lầm.

Nếu bạn quyết định xóa nó, tôi khuyên bạn nên sử dụng hg clone để nhận một bản sao mà không có nó. Đây là cách an toàn vì nó sẽ luôn để lại một bản sao lưu. Nếu bạn đẩy [z] vào kho từ xa:

[x] --- [y] --- [z] 

và bây giờ muốn gỡ bỏ nó, sau đó đăng nhập vào máy chủ và làm

hg clone -r y repo repo-without-z 

Sau đó repo-without-z sẽ chứa tất cả changests lên đến [y] - có nghĩa là, [z] sẽ được loại bỏ:

[x] --- [y] 

sau đó bạn có thể tiếp tục làm việc và đẩy một changeset mới:

[x] --- [y] --- [w] 

Nếu tôi đã kéo [z] changeset đã và bây giờ kéo [w] tôi sẽ thấy hai người đứng đầu trong kho:

  [w] 
     /
[x] --- [y] --- [z] 

Đây không phải là nguy hiểm cho mỗi gia nhập - nhưng mọi người có thể ngạc nhiên. Nếu tôi xóa [z] khỏi bản sao của tôi, tôi sẽ kết thúc với cùng một kho lưu trữ như bạn. Tuy nhiên, như đã viết ở trên, điều này có thể không thực tế nếu bạn có nhiều người dùng.

Bạn cũng có thể sử dụng MQ extension tới dải các thay đổi tại chỗ. Bằng cách đó bạn sẽ không tạo ra một bản sao mới.

Cuối cùng, nếu bạn chắc chắn rằng thao tác nhấn là thao tác cuối cùng được thực hiện trên máy chủ, thì hg rollback có thể được sử dụng để xóa giao dịch cuối cùng. Nhưng đừng làm điều này nếu bạn là người duy nhất có thể đẩy vào kho lưu trữ, nếu không bạn có thể sẽ quay trở lại một giao dịch khác.

Nếu kho lưu trữ là Bitbucket, thì bạn không thể đăng nhập vào máy chủ. Nhưng Bitbucket gần đây đã thêm một chức năng dải cho giao diện web của nó. Tìm kiếm "Quản lý kho lưu trữ" trong phần "Quản trị".

+1

Cảm ơn bài đăng của bạn. Tôi thực sự sử dụng bitbucket, tôi đã cố gắng để loại bỏ một cam kết từ repo bitbucket, nhưng có vẻ như là nó không phải là có thể. Ngay cả khi sử dụng dải, bitbucket nói với tôi rằng tôi đang chiếm rất nhiều không gian (vì chiến tranh tôi đã tải lên). –

+4

Vâng, Bitbucket tạo bản sao lưu các bản sửa đổi đã tước, và bản sao lưu được tính vào hạn ngạch của bạn :-( Bạn có thể xóa kho lưu trữ trên Bitbucket, tạo lại nó với cùng tên và đẩy từ bản sao cục bộ của bạn –

+1

Nhận xét của tôi ở trên không còn hợp lệ nữa, vui lòng xem [Jesper's] (http://stackoverflow.com/a/909290/110204) trả lời dưới đây. –

13

Bitbucket cung cấp cho bạn một gói (sao lưu) khi tước, và điều này không không được tính vào hạn ngạch của bạn. Lý do tại sao nó xuất hiện để làm như vậy, chỉ vì chúng tôi đã không làm mất hiệu lực phím bộ nhớ cache xác định bao nhiêu không gian bạn sử dụng.

Đây là lỗi trong hệ thống của chúng tôi và sẽ được khắc phục.Cho đến lúc đó, hãy yên tâm rằng changeset đã bị xóa và bản sao lưu miễn phí :-)

+6

Jesper đẹp, cảm ơn bạn đã ghé qua :-) –

1

Tôi đã có một trường hợp tương tự mà tôi muốn loại bỏ một chi nhánh sáp nhập "A" changeset từ chi nhánh "Dev" từ xa sử dụng TortoiseHg:

  1. Tạo chi nhánh AA từ chi nhánh phụ huynh chi nhánh của một; nguồn gốc của nó.
  2. Hợp nhất A vào AA (thư mục hoạt động) và đảm bảo rằng tùy chọn: "Hủy tất cả thay đổi từ bản sửa đổi khác" được chọn.
  3. Hợp nhất AA vào chi nhánh Dev (với thông báo cam kết cho biết rằng thay đổi nhánh A đã bị xóa).

Bạn sẽ thấy nhánh đó Một thay đổi không còn tồn tại trong Dev.

+1

Điều này làm việc cho tôi, giải pháp tuyệt vời. Tôi sẽ chỉ làm rõ rằng đối với (2), tôi nghĩ bạn có nghĩa là "hợp nhất A thành AA" và loại bỏ. Đó là những gì tôi đã làm anyway, và sau đó bước 3 tạo ra một cam kết tốt đẹp mà sao lưu tất cả những thay đổi không mong muốn. –

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