Jestem zdziwiony ta historia repozytorium. Na tej stronie zobaczysz mały oddział file-content
który jest połączony z powrotem do oddziału default
chociaż jedna głowa była przodkiem drugiej.
Kiedy próbuję zrobić coś podobnego, otrzymuję wiadomość o przerwaniu, chyba że
- gałąź boczna jest zamknięta i
- Łączę się od przodka do zamkniętej głowy gałęzi (ale nie na odwrót). (W tym repo chwycie,
file-content
gałąź jest oznaczona jako nieaktywna, nie zamknięta). </ strike>
Edytuj: rzeczywiste warunki, w których można łączyć się z przodkiem, opisano w mojej odpowiedzi.
Co się tutaj dzieje?
Odpowiedzi:
3 dla odpowiedzi № 1Nie ma żadnego technicznego powodu, dla którego nie można się połączyćz przodkiem: jak się dowiedziałeś, Mercurial wspiera go w pewnych okolicznościach, więc jest to wyłącznie ograniczenie GUI. Rozumowanie tego jest takie, że kiedy hg update
dałby taki sam wynik, jak hg merge
, powinieneś użyć tego zamiast tego dla uproszczenia.
ZA łączyć to tylko połączenie trzech stanów repozytorium: wspólny przodek i dwa zestawy zmian, które łączysz Łączenie trzykierunkowe odbywa się w oparciu o porcję podstawową. Tabela łączenia lokalnego ze zdalnym wygląda następująco:
ancestor local remote -> merge
old old old old (nobody changed the hunk)
old new old new (I changed the hunk)
old old new new (you changed the hunk)
old new new new (hunk was cherry picked onto both branches)
old foo bar <!> (conflict, both changed hunk but differently)
Gdyby local
jest przodkiem remote
, następnie ancestor == local
. Stół staje się:
ancestor local remote -> merge
old old old old (nobody changed the hunk)
old old new new (you changed the hunk)
W obu przypadkach merge
kolumna zawiera to, co było w remote
kolumna. W twoim przykładzie local
jest default
i remote
jest file-content
:
$ hg update default
$ hg merge file-content
Rezultatem jest zestaw zmian scalania, który wygląda tak samo file-content
.
3 dla odpowiedzi № 2
Jest to dziwnie słabo udokumentowane, ale jeśli skorzystasz z linku na dole https://www.mercurial-scm.org/wiki/Merge, zobaczysz tam wyjątek od reguły przeciwko łączeniu się z przodkiem. Nie wymaga to, aby potomek był zamkniętą gałęzią, jak początkowo przypuszczałem.
- Musisz połączyć się z przodkiem (tzn. Katalog roboczy musi zostać zaktualizowany do elementu nadrzędnego, a nie do innego zestawu zmian)
- Nazwy gałęzi rodzica katalogu roboczego i zestawu zmian, z którymi się łączysz, muszą się różnić. Na przykład. jedna ma domyślną nazwę gałęzi, druga ma nazwę-funkcji
To, co nam to pozwala, to możliwość uruchomienia nowego oddziału i scalenia go z powrotem, nawet jeśli nie wykonujemy żadnej pracy w pierwotnym oddziale w międzyczasie.