2012-04-23 25 views
11

Chúng tôi có hai đầu. Một là đầu phát triển chính của chúng tôi và cái còn lại là cái mà tôi đã quên cho đến hôm nay. Chúng tôi tìm thấy một lỗi và sửa nó trong nhánh phát triển chính của chúng tôi, và tôi nhận ra rằng nó cũng phải được sửa trong nhánh cũ.Quy trình làm việc để "quay trở lại" thay đổi thành chi nhánh Mercurial (Hg) khác nhau?

Tôi nghĩ sẽ tốt hơn nếu thực hiện thay đổi trên nhánh cũ hơn và hợp nhất với nhánh đã cập nhật, nhưng chúng tôi đã không thực hiện theo cách đó. Có thể xử lý mercurial này? Chúng tôi đã không cố gắng làm bất cứ điều gì như thế này và tôi không thể thực sự quấn quanh đầu của tôi như thế nào nó sẽ được thực hiện.

+0

http://stackoverflow.com/questions/854930/mercurial-cherry-picking-changes-for-commit – zerkms

+1

Tôi tìm thấy nó dễ nhất nếu "nhánh phát triển chính" là chính nó là một cây, nơi có những thay đổi khác nhau ("vô danh") chi nhánh phát triển ra và sau đó được đưa trở lại trong ... –

+3

(không phải là một câu trả lời, do đó nhận xét) * "Tôi nghĩ rằng nó sẽ có được tốt hơn để thực hiện thay đổi trên chi nhánh cũ" * ...Nó * có thể * thậm chí còn tốt hơn để áp dụng bugfix đó như là một "sửa lỗi daggy": bạn quay trở lại nơi lỗi đã được giới thiệu, bạn cam kết sửa lỗi và hợp nhất ngược dòng. Áp dụng nó "càng sớm càng tốt" * có thể * thậm chí tốt hơn là áp dụng đầu tiên cho "chi nhánh cũ" của bạn (bất kể đó là gì). Đối với các bản sửa lỗi nhỏ, sửa lỗi làm hoàn toàn đá (IMHO): http://mercurial.selenic.com/wiki/DaggyFixes – TacticalCoder

Trả lời

14

Có, bạn có hai lựa chọn tốt:

Graft: mới trong Mercurial 2,0

Phiên bản này giới thiệu graft command có thể backport thay đổi một cách thông minh. Các "trí thông minh" là nó sẽ sử dụng hòa trộn trong nội bộ và điều này có nghĩa là bạn sẽ có được

  • Hỗ trợ cho đặt lại tên: Hãy tưởng tượng rằng bạn sửa lỗi trong tập tin foo.c trên chi nhánh phát triển. Trong chi nhánh bảo dưỡng cũ hơn foo.c được gọi là bar.c. Sử dụng hg graft, thay đổi thành foo.c có thể được hợp nhất chính xác vào số bar.c cũ.

  • Hợp nhất ba chiều: Ghép liên quan đến twisting the graph around và hợp nhất trong biểu đồ tạm thời đó. Lợi thế của việc hợp nhất ba chiều là bạn có thể sử dụng công cụ kết hợp đồ họa thông thường của mình để giải quyết xung đột.

Để sao chép chóp default vào old-branch bạn chỉ cần chạy

$ hg update old-branch 
$ hg graft default 

ghép: cũ phiên bản

Trước khi chúng tôi đã có lệnh ghép, các transplant extension là con đường để đi. Phần mở rộng đơn giản này sẽ xuất khẩu một changeset như một bản vá và cố gắng áp dụng bản vá vào một số bản sửa đổi khác.

Vì chúng tôi đang xử lý các bản vá "câm" nên những thứ như đổi tên sẽ không được tính đến và bạn sẽ không nhận được hỗ trợ cho công cụ hợp nhất của bạn vì không có cách hợp nhất ba chiều. Mặc dù vậy, tôi thấy rằng cấy ghép hoạt động rất tốt trong thực tế.

Sử dụng ghép rất đơn giản:

$ hg update old-branch 
$ hg transplant default 

này rất gần với chạy

$ hg update old-branch 
$ hg export default | hg import - 

trừ ghép mà cũng cho biết thêm một phần dữ liệu meta mà ghi lại changeset gốc trong changeset cấy. Điều này có thể được sử dụng để bỏ qua cấy ghép trong tương lai.

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