2012-12-21 10 views
8

Ho un ramo che è stato sviluppato per un lungo periodo di tempo. Durante lo sviluppo, il ramo predefinito è stato fuso in quel ramo più volte. Vorrei ora rivedere tutti i cambiamenti fatti su quella branca ignorando le unioni, per decidere se è sicuro fonderlo di default.mercurial - vedere le modifiche sul ramo ignorando tutti i commit di unione

Ho provato

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

ma mostra ancora modifiche introdotte dal unioni. Abbiamo anche provato seguendo questo How to show the diff specific to a named branch in mercurial ma

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

ancora portare cambiamenti introdotti dal unioni.

risposta

5

È deve leggere su revsets sintassi

Il tuo caso

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

+0

Grazie @ lazy-tasso, ma ho paura che produce uscita non diverso da 'hg diff -r "ramo ('myBranch') - merge()"' vedo ancora le modifiche introdotte dal unioni . BTW intendevi "hg diff -r" branch ('myBranch') e! Merge() "', vero? – Swiety

+0

@Serie 1) 'log' e' diff' sono comandi diversi, ** COMANDI TOTALMENTE DIVERSI ** 2) Quando ho scritto 'log' - ho scritto' log', perché devi ottenere ** l'elenco dei changeset ** e prova le modifiche ** in ogni changeset nel set ** (* more * di un singolo diff, diff -c per ogni revisione in set di 'log') 3) RTFM" Formal Logic ":' x - y'! = 'x e! y' !!! ** (changesets in x ma non in y)! = (Changesets in x e not in y) ** - ritorno a scuola –

+1

La mia logica formale non è ottima, ma in questo caso non 'x - y' e 'x e! y' danno lo stesso risultato? Qualcosa in 'myBranch' che non è anche una fusione? – icabod

6

Il problema con i comandi è che quando si esegue una hg diff e passarlo diversi gruppi di modifiche, in realtà esegue una diff tra quei changeset, quindi vedrai il risultato dell'unione.

Se si desidera visualizzare solo le modifiche apportate dai gruppi di modifiche allora si potrebbe utilizzare export:

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

Per facilitare la revisione, si può produrre questi per i file con i nomi in base alla revisione/changeset ID:

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

... crea un file per ogni changeset non unione in mybranch, e uscite in un file con il nome "40 cifre changeset id.patch". Se preferisci il numero di revisione (utile solo per il tuo repository locale dato che gli ID di revisione sono locali), utilizza "%R.patch".

1

Di seguito utilizza il comando log ma con il parametro --patch può mostrare le linee modificate così:

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

forma breve:

hg log -Mpb my-branch 
0

Questa è una domanda molto buona, che mi Sto cercando di trovare una buona risposta per molto tempo, eppure non ne ho trovata una buona. OK, una cosa che funziona al 100% è questo:

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 

Io uso questo flusso di lavoro per tutto il tempo, ma non mi soddisfa pienamente, perché richiede di passare rami (quando in realtà non potrebbe desiderare di fare merge reale proprio in questo momento esatto, sto solo controllando che cosa c'è)

Ho cercato per anni una buona soluzione qui, ma finora non ne sono stati trovati.Provato quelli:

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

Questo problema discusso anche in:

Problemi correlati