2012-10-31 5 views
5

Zrobiłem serię niemych kroków z moją lokalną kopią naszego wspólnego repozytorium, i szukam sposobu, jak naprawić to. Kroki są:Jak pchać, bez tworzenia nowych głów, po utworzeniu wielogłowicowej gałęzi, rebelacji i kilku scaleń

  • Kiedyś zakładki mają wiele głów gałęzi rozwojowej, że inni ludzie używają:

    -o---o---o-----o--- <- dev branch 
        \----1----1------ <- another head of the dev branch, 
             where I committed stuff 
    
  • I stworzył nowy oddział, nadal lokalne, jakiś czas później

    /---------------x <- new branch 
    -o---o---o-----o--- <- dev branch 
        \----1----1------ <- another head of the dev branch, 
             where I committed stuff 
    
  • na jedną głowę, że zawiera tylko mój kod, zrobiłem rebase na innym oddziale

        /-1'--1'-- <- rebase 
        /---------------x   <- new branch 
    -o---o---o-----o---   <- dev branch 
        \----1----1------   <- another head of the dev branch, 
                where I committed stuff 
    
  • wtedy, ja połączył rebase, a następnie kilka zobowiązuje później połączyła domyślny

        ----------d-\  <-default 
               \ 
            /-1'--1'\  \ 
        /---------------x--------x--x-x-x-- <- new branch 
    -o---o---o-----o---   
        \----1----1------   
    

Teraz chciałem pchnąć mój nowy oddział do serwera (hg push --new-branch -b newBranch) , ale dostaję abort: push creates new remote head, ponieważ zobowiązania 1' należą do oddziału dev.

Co należy robić? Chciałbym uniknąć tworzenia tej dodatkowej głowy.

Aktualizacja:

na życzenie, jest to wyjście hg heads:

changeset: 839:f2033d695fcd <- want to push this 
branch:  newBranch 
tag:   tip 
user:  me 
date:  Wed Oct 31 13:05:51 2012 +0100 

changeset: 826:7fde19d7f467 
branch:  devBranch 
user:  my-collegue 
date:  Tue Oct 23 14:59:42 2012 +0200 

changeset: 820:23853bbf68df <- the part after rebase that got merged 
branch:  devBranch 
user:  me 
date:  Mon Oct 22 15:36:26 2012 +0200 

changeset: 807:899344cfb145 <- obsolete (branch with 1's) 
branch:  devBranch 
parent:  711:454f29c03fb1 
user:  me 
date:  Mon Oct 22 15:36:26 2012 +0200 

changeset: 712:d5e8a62a7f5f <- default, needs to stay 
parent:  648:2bbcc01aa191 
user:  me 
date:  Wed Aug 22 16:21:09 2012 +0200 
+0

Nie używaj "rysowania" z wolnej ręki - masz polecenia konsoli i możliwość wklejania poleceń wypisanych w pytaniu ** sformatowane ** ('hg log' lub' hg glog' dla drzewa tutaj i na http: // stackoverflow.com/questions/11982648/reassigning-local-commits-to-a-different-branch-in-rcrurial, na przykład). Póki co, proszę, dodaj wynik "hg heads" z komentarzem - który to nagłówek jest przestarzały i nie może istnieć (całkowicie lub tylko w push-target). Przeczytaj także o opcji -r w poleceniu push –

+0

Hi @LazyBadger, nie mogę podać wyjścia "log", ponieważ jest o wiele więcej zatwierdzeń niż opisałem, a także zapomniałem dokładnych poleceń, które wykonałem, aby dostać się do ten stan ... Pytanie zaktualizowane, aby zawierało wyniki głowic. Nie rozumiem twojego odniesienia do opcji '-r', jak/dlaczego powinno to pomóc? –

+0

dokładne polecenia nie są potrzebne w tym przypadku - ** ty ** (nie ja) muszę zobaczyć drzewo devBranch (od wspólnego rodzica 807 i 820 do 826), zdefiniuj * możliwość * (i * konieczność *) połączenie głów DevBranch. Lub po prostu 'push -r f2033d695fcd' będzie wystarczający –

Odpowiedz

1

I rozwiązać problem, bez pchania innego głowę do repo i bez scalania 23853bbf68df na newBranch. Prawdopodobnie nie jest to najczystszy sposób, ale zostawiam to jako punkt odniesienia. Krótko mówiąc, zrekonstruowałem cały oddział, wykonując wszystkie poprawki i ponownie je stosując.

Najpierw zabił newBranch „ES głowa 899344cfb145, za pomocą taśmy na pierwszym rozbieżnej rewizji robiłam:

hg strip -r 646 

Potem produkowane łatek email (nie mógł grać z MQ) dla wszystkich zatwierdzeń że są w newBranch, od jego powstania:

hg export -g -r 797:808 -r 810 -r 815:822 -r 824:830 -o "%n-%m.patch" 
  • 797:808 są plastry w newBranch które były w rebased części devBranch (1' zatwierdza z pierwotnej figury).
  • 810 i 815:822 to inne poprawki w numerze newBranch. 811:814 należą do innego oddziału, więc musiałem je wykluczyć.
  • 823 to zatwierdzenie scalenia z default, więc pominąłem ten.
  • 824:830 są wszystkie zatwierdzenia po scaleniu z default.

Teraz importowane te plamy na nowego szefa newBranch:

hg up -r 796 
# there are 29 patches, applying till merge 
hg import --bypass {01..21}*.patch 
hg up tip 
hg merge default 
hg ci -m 'merging in default' 
hg import --bypass {22..28}*.patch 

Wreszcie, po prostu pozbawione pierwotnego głowę newBranch.

hg strip -r 797 

To może nie działać w każdej sytuacji. Podczas scalania musiałem rozwiązać niektóre konflikty, ale całkiem łagodne. Mam nadzieję, że to pomaga komuś.

7

można wcisnąć tylko jedna głowica jesteś zainteresowany Mercurial. Dla ciebie oznaczałoby to robi:

hg push -r f2033d695fcd 

Jeśli docelowy repo została zaktualizowana trzeba ciągnąć, scalanie i ponowne naciśnięcie:

hg pull 
hg up -r <remote head> 
hg merge -r f2033d695fcd 
hg ci 
hg push 
+0

Dzięki za odpowiedź, ale jak już wspomniałem, powoduje to 'abort: push tworzy nową głowicę zdalną 23853bbf68df na gałęzi devBranch'. Jak sugeruje @LazyBadger, spróbuję połączyć tę głowę, chociaż jest to coś, czego chciałbym uniknąć. –

+0

To jest inna głowa niż ta, którą próbujesz naciskać. Jeśli określisz głowicę, którą chcesz wypchnąć słowem '-r', nie dostaniesz tej głowy. –

Powiązane problemy