2012-12-21 10 views
8

Ich habe einen Zweig, der für eine lange Zeit entwickelt wurde. Während der Entwicklung wurde der Standardzweig mehrmals in diesen Zweig eingebunden. Ich möchte jetzt alle Änderungen in diesem Zweig überprüfen, die Zusammenführungen ignorieren, um zu entscheiden, ob es sicher ist, sie mit dem Standard zusammenzuführen.mercurial - siehe Änderungen auf dem Zweig ignorieren alle Zusammenführungs-Commits

Ich versuchte

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

aber es zeigt immer noch durch Verschmelzungen eingeführten Änderungen. Auch versucht im Anschluss an diese How to show the diff specific to a named branch in mercurial aber

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

noch Änderungen durch Verschmelzungen eingeführt bringen.

Antwort

5

Sie haben über revsets Syntax

Ihr Fall

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

+0

Thanks @ lazy-Dachs, aber ich habe Angst, dass zu 'hg diff -r "Zweig ('mybranch') - merge()" -Ausgabe nicht anders erzeugt durch Verschmelzungen' ich noch Änderungen sehen eingeführt . BTW Sie gemeint 'HG diff -r" Zweig ('myBranch') und! Merge() "', nicht wahr? – Swiety

+0

@Swiety 1) 'log' und' diff' sind verschiedene Befehle, ** TOTAL VERSCHIEDENE BEFEHLE ** 2) Wenn ich 'log' geschrieben habe - habe ich' log' geschrieben, weil du eine ** Liste von Changesets ** bekommen musst ** und teste Änderungen ** in jedem Änderungsset in Menge ** (* mehr * als einzelnes diff, diff -c für jede Revision in der Menge von 'log') 3) RTFM "Formale Logik": 'x - y'! =' x und! y' !!! ** (Changesets in x, aber nicht in y)! = (Changesets in x und nicht in y) ** - zurück zur Schule –

+1

Meine formale Logik ist nicht großartig, aber in diesem Fall nicht 'x - y' und 'x und! y' geben das gleiche Ergebnis? Alles in 'myBranch', das ist auch kein Merge? – icabod

6

Das Problem mit Ihren Befehlen zu lesen ist, dass, wenn Sie einen hg diff durchführen und es mehrere Change passieren, Sie tatsächlich durchführen Unterschied zwischen diesen Änderungsmengen, daher sehen Sie das Ergebnis der Zusammenführung.

Wenn Sie nur die Änderungen von den Changesets, um zu sehen, dann können Sie export verwenden:

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

erleichtert die Prüfung, können Sie die Ausgabe diese Dateien mit Namen auf der Grundlage der Revisions-/changeset ID:

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

... erstellt eine Datei für jeden nicht-merge changeset in mybranch und gibt es mit dem Namen eine Datei „40-stellige changeset id.patch“. Wenn Sie die Revisionsnummer bevorzugen (nur nützlich für Ihr lokales Repository, da Revisions-IDs lokal sind), verwenden Sie "%R.patch".

1

Nachfolgend verwendet das log Befehl aber mit dem --patch Parameter kann es die geänderten Zeilen zeigen auch:

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

Kurzform:

hg log -Mpb my-branch 
0

Das ist eine sehr gute Frage, die ich Ich versuche lange Zeit eine gute Antwort zu finden und habe trotzdem keine gute gefunden. OK, eine Sache, die zu 100% funktioniert, ist dies:

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 

Ich benutze dies die ganze Zeit Workflow, aber es hat mich nicht voll befriedigen, weil es Zweige wechseln erfordert (wenn ich könnte in der Tat nicht unbedingt merge tun will genau in diesem Moment, ich überprüfe gerade, was da ist)

Ich habe seit Ewigkeiten für eine gute Lösung hier gesucht, aber bis jetzt gibt es keine gefunden.Versuchen die:

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

Dieses Problem diskutiert auch:

Verwandte Themen