2012-12-21 13 views
8

Mam oddział, który został opracowany przez długi czas. Podczas rozwoju domyślna gałąź została kilkakrotnie scalona w tę gałąź. Chciałbym teraz przejrzeć wszystkie zmiany dokonane w tym oddziale, ignorując scalenia, aby zdecydować, czy można bezpiecznie scalić je z domyślnymi.rtęć - zobacz zmiany w gałęzi, ignorując wszystkie zatwierdzenia scalania

Próbowałem

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

ale nadal pokazuje zmiany wprowadzone przez scala. Próbowałem również po to How to show the diff specific to a named branch in mercurial ale

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

nadal wprowadzają zmiany wprowadzone przez scala.

Odpowiedz

5

Masz czytać o revsets składnię

twoim przypadku

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

+0

Dzięki @ leniwe-borsuk, ale obawiam się, że nie powoduje wyjście do innego 'hg diff -r "gałęzi ('myBranch') - merge()"' wciąż widzę zmian wprowadzonych przez scala . BTW miałeś na myśli gałąź 'hg diff -r '(' myBranch ') i! Merge()", prawda? – Swiety

+0

@Swiety 1) 'log' i' diff' są różnymi poleceniami, ** CAŁKOWICIE RÓŻNE KOMENDY ** 2) Kiedy napisałem 'log' - napisałem' log', ponieważ musisz dostać ** listę zestawów zmian ** i testuj zmiany ** w każdym zestawie zmian w zestawie ** (* więcej * niż pojedynczy diff, diff -c dla każdej wersji w zbiorze 'log') 3) RTFM" Formalna logika ":' x - y'! = 'x i! y'''' !!! ** (Zmiany w x ale nie w y)! = (Zmiany w x, a nie w y) ** - powrót do szkoły –

+1

Moja formalna logika nie jest świetna, ale w tym przypadku nie "x - y" i 'x i! y' dają ten sam rezultat? Coś w 'myBranch', która nie jest również połączeniem? – icabod

6

Problem z twoich poleceń jest to, że podczas wykonywania hg diff i przekazać go kilka Zestawienia zmian, właściwie przeprowadzić diff między tymi zestawami zmian, stąd zobaczysz wynik scalenia.

Jeśli chcesz zobaczyć tylko zmiany dokonane przez Zestawienia zmian następnie można użyć export:

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

Dla ułatwienia przeglądów, można wyprowadzać je do plików o nazwach oparciu o id rewizji/changeset:

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

... tworzy plik dla każdego changeset zakaz łączenia w mybranch i przekazuje je do pliku o nazwie „40-cyfrowy changeset id.patch”. Jeśli wolisz numer wersji (przydatne tylko w lokalnym repozytorium, ponieważ identyfikatory wersji są lokalne), użyj "%R.patch".

1

następujących zastosowań komendy log ale z parametrem --patch może wykazać zmodyfikowane linie, a także:

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

Krótka forma:

hg log -Mpb my-branch 
0

To jest bardzo dobre pytanie, które ja Próbuję znaleźć dobrą odpowiedź przez długi czas, ale nie znalazłem dobrego. OK, jedna rzecz, która działa w 100% to:

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 

Używam tego przepływu pracy przez cały czas, ale nie spełnia mnie całkowicie, ponieważ wymaga, aby przełączyć oddziałów (kiedy faktycznie nie chcieć zrobić rzeczywisty seryjnej dokładnie w tym momencie, właśnie sprawdzam, co tam jest)

Szukałem od wieków dobrego rozwiązania, ale do tej pory nie znaleziono żadnych.Próbowaliśmy ci:

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

Problem ten omówiono także w:

Powiązane problemy