2012-12-21 29 views
8

Tôi có một chi nhánh được phát triển trong một thời gian dài. Trong nhánh mặc định phát triển đã được sáp nhập vào nhánh đó nhiều lần. Bây giờ tôi muốn xem lại tất cả các thay đổi được thực hiện trên nhánh đó bỏ qua các kết hợp, để quyết định xem có an toàn để hợp nhất nó vào mặc định hay không.mercurial - xem các thay đổi trên chi nhánh bỏ qua tất cả các cam kết hợp nhất

tôi đã cố gắng

hg diff -r "branch('myBranch') - merge()"

nhưng nó vẫn cho thấy những thay đổi được giới thiệu bởi sáp nhập. Cũng cố gắng sau này How to show the diff specific to a named branch in mercurial nhưng

hg diff -r "branch('myBranch') - branch('default')"

vẫn mang lại những thay đổi được giới thiệu bởi sáp nhập.

Trả lời

5

Bạn đọc về revsets cú pháp

trường hợp của bạn

hg log -r "branch('myBranch') and ! merge()"

+0

Cảm ơn @ lười biếng-lửng, nhưng tôi sợ rằng sản lượng sản xuất không khác nhau để 'hg diff -r "chi nhánh ('myBranch') - merge()" ' tôi vẫn thấy các thay đổi được giới thiệu bởi hòa trộn . BTW bạn có nghĩa là 'hg diff -r 'branch (' myBranch ') và! Merge()" ', phải không? – Swiety

+0

@Swiety 1) 'log' và' diff' là các lệnh khác nhau, ** CÁC SỐ LỆNH HOÀN THÀNH ĐẦY ĐỦ ** 2) Khi tôi viết 'nhật ký' - tôi đã viết' nhật ký', bởi vì bạn phải có ** danh sách các thay đổi ** và kiểm tra thay đổi ** trong mỗi changeset trong tập ** (* nhiều hơn * so với đơn khác, diff -c cho mỗi sửa đổi trong tập hợp «log') 3) RTFM" Logic chính thức ":' x - y'! = 'x và! y' !!! ** (Thay đổi trong x nhưng không phải trong y)! = (Thay đổi trong x và không phải trong y) ** - trở lại trường học –

+1

logic chính thức của tôi là không lớn, nhưng trong trường hợp này không 'x - y' và 'x và! y' cho cùng một kết quả? Bất cứ điều gì trong 'myBranch' cũng không phải là một sự hợp nhất? – icabod

6

Vấn đề với lệnh của bạn là khi bạn thực hiện một hg diff và vượt qua nó nhiều changesets, bạn thực sự thực hiện một khác nhau giữa những changesets, do đó bạn sẽ thấy kết quả hợp nhất.

Nếu bạn muốn nhìn thấy chỉ là những thay đổi được thực hiện bởi các changesets sau đó bạn có thể sử dụng export:

$ hg export -r "branch('mybranch') and not merge()" 
// lists the changes made by each changeset 

Đối rà soát dễ dàng hơn, bạn có thể xuất các các tập tin với những cái tên dựa trên id sửa đổi/changeset:

$ hg export -r "branch('mybranch') and not merge()" -o "%H.patch" 

... tạo tệp cho mỗi thay đổi không hợp nhất trong mybranch và xuất kết quả vào tệp có tên "thay đổi 40 chữ số id.patch". Nếu bạn muốn số sửa đổi (chỉ hữu ích cho kho lưu trữ cục bộ của bạn là id sửa đổi là địa phương), hãy sử dụng "%R.patch".

1

Sau đây sử dụng lệnh log nhưng với tham số --patch nó có thể hiển thị các dòng biến đổi cũng như:

hg log --branch my-branch --no-merges --patch 

hình thức viết tắt:

hg log -Mpb my-branch 
0

Đó là một câu hỏi rất tốt, mà tôi đang cố gắng tìm câu trả lời tốt trong một thời gian dài, nhưng chưa tìm được câu trả lời hay. OK, có một điều mà 100% các công trình là thế này:

hg status  # make sure that you don't have local changes 
hg up <target_branch> 
hg merge <your branch> 
hg diff > merge.diff 
hg up -C # this one cleans the merge 

tôi sử dụng này workflow tất cả các thời gian, nhưng nó không làm hài lòng tôi hoàn toàn bởi vì nó đòi hỏi phải chuyển đổi chi nhánh (khi tôi thực sự có thể không muốn làm thực tế merge ngay tại thời điểm chính xác này, tôi chỉ đang kiểm tra những gì ở đó)

Tôi đã tìm kiếm tuổi cho một giải pháp tốt ở đây, nhưng cho đến nay không tìm thấy.Cố gắng những:

hg diff -r "branch('.') and ! merge()" # this page 
hg diff -r "default:branch('.') and not merge()" 
hg diff -r "parents(branch(.)):branch('.') and not merge()" 

Vấn đề này cũng được thảo luận trong:

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