2010-04-03 30 views
95

Tôi mới hợp tác với Mercurial. Tình huống của tôi:Làm cách nào để hủy hợp nhất hg?

  • Một lập trình viên khác thay đổi rev 1 của tệp để thay thế thụt lề 4 dấu cách bằng thụt lề 2 dấu cách. (I.e. thay đổi mọi dòng.) Gọi rev 2 đó, được đẩy tới repo từ xa.
  • Tôi đã thực hiện các thay đổi đáng kể rev 1 với các thay đổi mã khác nhau trong không gian làm việc cục bộ của tôi. Gọi số rev 3.
  • Tôi đã hg pull ed và hg merge d mà không có ý tưởng rõ ràng về những gì đang diễn ra.
  • Các xung đột vô số và không thực sự đáng kể.

Vì vậy, tôi thực sự muốn thay đổi repo địa phương của mình thành thụt lề 2 dấu cách trước khi hợp nhất; sau đó hợp nhất sẽ là tầm thường (tôi giả sử). Nhưng tôi dường như không thể sao lưu được. Tôi nghĩ rằng tôi cần phải hg update -r 3 nhưng nó nói abort: outstanding uncommitted merges.

Làm cách nào để hoàn tác hợp nhất, thay đổi khoảng cách trong repo cục bộ của tôi và sửa lại?

Trả lời

97

Bạn có thể loại bỏ những thay đổi không bị giam với C (hoặc --clean) cờ:

hg update -C -r 3 

BEWARE: Tất cả những gì đã không được cam kết sẽ biến mất!

Sau đó, bạn nên sử dụng một số loại công cụ định dạng mã để thực hiện toàn bộ thao tác hoặc ít nhất một số tìm và thay thế bằng cụm từ thông dụng. Một cái gì đó đơn giản như thay thế những gì phù hợp với ^____ (sử dụng 4 dấu cách thay vì gạch dưới) với __ (2 dấu cách), lặp đi lặp lại một vài lần (trừ khi bạn có một số mã lồng nhau) sẽ hoạt động.

+0

Ồ - cảm ơn. Bạn phải trả lời đúng khi tôi tự tìm ra. Tôi đang ở trong các emacs, vì vậy 'M-x indent-region' đã làm trò lừa đảo. – Grumdrig

+4

Đáng lưu ý rằng các tệp không được theo dõi sẽ không bị xóa. – djsutho

1

Tôi dường như chỉ cần hg update -C -r 3, ghi đè các tệp cục bộ của mình bằng cách ghi nhớ (đó là những gì tôi nghĩ hg update sẽ làm; nhưng tôi đã sai.) Cảm ơn sự giúp đỡ của tôi!

+2

Thêm '-C' hoặc' --clean' là cách bạn yêu cầu Mercurial tiếp tục, ngay cả khi nó sẽ vứt bỏ một số tệp đã sửa đổi. Bạn nói đúng rằng 'hg update -r X' thường sẽ đưa bạn đến phiên bản X, nhưng khi bạn đang ở trong một hợp nhất bạn cần nhấn mạnh thêm một chút :-) –

+7

Tôi nghĩ rằng" hg revert --all --cancelmerge "sẽ trực quan hơn nhiều. –

98

BTW: nếu bạn chỉ cần phục hồi các hợp bạn đã làm và 3 không phải là số phiên bản của bạn, bạn có thể làm điều này:

hg update -C -r . 
+16

Đối với bất cứ ai như tôi mà lúc đầu không nhận được cách thức hoạt động: dấu chấm '.' là một phím tắt cho bản sửa đổi trước đó. –

+1

câu trả lời tuyệt vời! nên là tốt nhất –

+1

@Thymine: Từ 'hg help update' tôi nhận được: * Nếu không có thay đổi nào được chỉ định, cập nhật lên đầu của nhánh hiện tại ... * và mẹo có thể không phải lúc nào cũng là bản sửa đổi hiện tại bạn đang làm việc. Tôi đã không kiểm tra nó, cho đến nay .. – math

17

Để hoàn tác một hợp nhất không bị giam, sử dụng

hg update --clean 

mà sẽ kiểm tra ra một bản sao sạch của cha mẹ hợp nhất ban đầu, mất tất cả thay đổi.

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