2012-12-21 23 views
8

Uzun bir süre için geliştirilmiş bir şubem var. Geliştirme sırasında varsayılan şube bu şubeye birkaç kez birleştirildi. Şimdi, o şube üzerinde yapılan tüm değişiklikleri gözden geçirmeyi, bunları birleştirme varsayılanının güvenli olup olmayacağına karar vermesini istiyorum. mercurial - tüm birleştirmeyi kabul etmeyen daldaki değişikliklere bakın.

Ben

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

denedik ama yine de birleştirme tarafından tanıtılan değişiklikleri gösterir. Ayrıca, bu How to show the diff specific to a named branch in mercurial ama

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

hala birleştirme tarafından tanıtılan değişiklikler getirecek aşağıdaki çalıştı.

cevap

5

Yaklaşık revsets sözdizimini

Vakanız okumak sahip

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

+0

tembel-porsuk @ teşekkürler, ama o 'hg fark -r "dalında ('myBranch') - birleştirme()" farklı değildir çıktı üretir korkuyorum' Hala birleştirme tarafından tanıtılan değişiklikleri görmek . BTW 'hg diff -r' şubesini ('myBranch') ve! Merge() ''kastettiniz, değil mi? – Swiety

+0

@Sahip 1) 'log' ve' diff' farklı komutlardır, ** TAMAMEN FARKLI KOMUTLAR ** 2) 'log' yazdığımda - 'log' yazdım. ve ** setindeki her değişiklik kümesindeki test değişiklikleri ** (tek farktan * daha *, 'log' kümesindeki her revizyon için diff-c) 3) RTFM" Resmi Mantık ": x-y'! = x ve! ** (x'deki Changeset'leri, ancak y'de değil)! = (X'deki Changesets ve y'de değil) ** - okula dönüş –

+1

Resmi mantığım harika değil, ancak bu durumda x - y' ve x ve! y aynı sonucu veriyor? MyBranch'da herhangi bir şey de birleştirme değil mi? – icabod

6

sizin komutlarla sorun birkaç changesets bir hg diff gerçekleştirmek ve bunu geçtiğinde, aslında bir etki göstermesidir Bu değişiklikler arasında fark var, dolayısıyla birleştirme sonucunu göreceksiniz.

o zaman export kullanabilirsiniz changesets tarafından yapılan sadece değişiklikleri görmek istiyorsanız: düzeltmesi/değişiklik kümesi kimliği temel adlarıyla dosyalar daha kolay gözden geçirme için

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

, çıktısını alabilirsiniz bu:

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

... adı "40 haneli değişiklik kümesi id.patch" ile bir dosyaya bir mybranch olmayan her birleştirme changeset için dosya ve çıkışları bunu oluşturur. Revizyon numarasını tercih ederseniz (sadece yerel deponuz için revizyon kimlikleri için yararlıdır), "%R.patch"'u kullanın.

1

şu log komutu kullanır fakat --patch parametresi ile buna da modifiye hatları gösterebilir:

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

Kısa biçim: çok iyi bir soru,

hg log -Mpb my-branch 
0

ki ben uzun bir süre için iyi bir cevap bulmaya çalışıyorum ve henüz iyi bir tane bulamadım. Tamam,% 100 çalışıyor bir şey şudur:

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 

Bunu her zaman iş akışı kullanmak, ancak dalları (geçiş gerektirir çünkü aslında gerçek birleştirme yapmak istemeyebilirsiniz zaman tam beni tatmin etmiyor Şu anda tam olarak, ben sadece ne olduğunu kontrol ediyorum)

Burada iyi bir çözüm için çağlar arıyordum, ama şimdiye kadar hiçbiri bulunamadı.Denedim olanlar:

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()" 

Bu sorun da tartışılan: "Eğer açık bir şekilde tanımlayabilirsiniz eğer öyleyse sen SO okundu Mercurial katkıda birimizi ikna olabilir: iyi cevabı var