Làm thế nào để từ bỏ hợp nhất hg?


131

Tôi mới hợp tác với Mercurial. Hoàn cảnh của tôi:

  • Một lập trình viên khác đã thay đổi rev 1 của một tệp để thay thế thụt lề 4 không gian bằng thụt lề 2 không gian. (Tức là thay đổi mọi dòng.) Gọi đó là rev 2, được đẩy đến repo từ xa.
  • Tôi đã cam kết 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 đó là rev 3.
  • Tôi đã hg pulled và hg merged mà không có một ý tưởng rõ ràng về những gì đang xảy ra.
  • Các xung đột là vô số và không thực sự quan trọng.

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

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

Câu trả lời:


126

Bạn có thể loại bỏ các thay đổi không được cam kết với cờ -C (hoặc --clean):

hg update -C -r 3

THƯỞNG: Mọi thứ không được cam kết sẽ biến mất!

Sau đó, có lẽ 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ộ hoạt động hoặc ít nhất là một số tìm và thay thế bằng các biểu thức thông thường. Một cái gì đó đơn giản như thay thế những gì khớp ^____(sử dụng 4 khoảng trắng thay vì dấu gạch dưới) bằng __(2 dấu cách), được 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.


Ồ cảm ơn. Bạn phải trả lời đúng khi tôi tự tìm ra nó. Tôi đang ở trong emacs, M-x indent-regioncũng đã lừa được.
Grumdrig

6
Đáng lưu ý rằng các tập tin không bị theo dõi sẽ không bị xóa.
djsutho

132

BTW: nếu bạn chỉ hoàn nguyên hợp nhất bạn đã làm và 3 không phải là số sửa đổi của bạn, bạn có thể làm điều này:

hg update -C -r .

24
Đối với bất kỳ ai như tôi lúc đầu không hiểu cách thức hoạt động của nó: dấu chấm .là lối tắt cho phiên bản trước.
Jeroen Wiert Pluimers

1
câu trả lời chính xác! nên là tốt nhất
Oleg Abrazhaev

1
@Thymine: Từ hg help updatetôi nhận được: Nếu không có thay đổi nào được chỉ định, hãy cập nhật vào đầu của nhánh có tên hiện tại ... và mẹo có thể không phải luôn luôn là bản sửa đổi hiện tại của bạn. Tôi đã không kiểm tra nó, cho đến nay ..
toán

1
À đó là một chi tiết tốt để biết ... thực ra tôi sẽ xóa bình luận của mình, tuyên bố bỏ đi -r .là như vậy
Thymine

Đơn giản và rất hữu ích.
Naveen Kumar V

33

Để hoàn tác việc hợp nhất không được cam kết, hãy sử dụng

hg update --clean

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


2

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


2
Thêm -Choặc --cleanlà cách bạn nói với Mercurial đi trước, ngay cả khi nó sẽ vứt bỏ một số tệp đã sửa đổi. Bạn đúng hg update -r Xsẽ thường đưa bạn đến phiên bản X, nhưng khi bạn hợp nhất, bạn cần nhấn mạnh thêm một chút :-)
Martin Geisler

7
Tôi nghĩ rằng "hg Revert --all --celonmerge" sẽ trực quan hơn nhiều.
Warren P
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.