2012-08-03 10 views
6

Mam dwie gałęzie A i B. Chcę utworzyć nowy (scal) commit na A z bieżącym stanem A jako rodzic, który odnosi się do drzewa plików opisanego przez B odrzucając wszystko od A. Zasadniczo historia B powinna zostać zgnieciona w pojedynczym zatwierdzeniu.Tworzenie Merge Commit zastępowanie Ours przez nich

Stan konkretnego repozytorium składa się z dwóch niezależnych gałęzi, które nie mają wspólnego przodka (pochodzącego z dwóch niezależnych repozytoriów), ale które opisują tę samą treść. Teraz chcę znaleźć "git" - aby je połączyć. Podstawowym rozwiązaniem (bez git) byłoby checkout A i po prostu skopiowanie zawartości B do drzewa roboczego i wykonanie git commit. To jest w zasadzie to, co wcześniej zrobiłem, aby propagować zawartość drugiego repozytorium w pierwszej.

Aby zrobić to z git Próbowałem

git checkout A 
git merge --squash B 

Ale unforunately to scalić konflikty generowane dla wszystkich plików, które różnią się między A i B, co jest na pewno nie tego się spodziewałem.

Zasadniczo coś

git merge --squash -s theirs 

powinien wykonać zadanie, ale strategia seryjnej theirs nie istnieje. Czytając Docu pokazuje możliwość korzystania coś

git merge -X theirs 

który jest opcją strategię scalania recursive. Ale to wciąż stanowi połączenie niekolidujących fragmentów. Tylko sporne fragmenty są pobierane bezpośrednio z theirs.

+0

należałoby z tych 'scalić --their' strategie pomocne tutaj? http://stackoverflow.com/questions/4911794/git-command-for-making-one-branch-like-another/4912267#4912267 – VonC

+0

Wspomniana symulacja nr 2 powinna wykonać zadanie. Po prostu użyłem go do "scalania - sequash". Następnie w historii B następuje scalenie z A, ale to jest w porządku. Jeśli nie jest to pożądane, można ponownie ustawić B. –

+0

Ok, dodałem # 2 jako odpowiedź. – VonC

Odpowiedz

2

Jak można komentować, ze wszystkich strategii scaleniu --theirs Wymienię w „git command for making one branch like another”, druga opcja jest blisko tego, co trzeba:

Shows jako seryjnej, z naszymi rodzica jako pierwszy .
(zaproponowany przez jcwenger)

git checkout -b tmp upstream 
git merge -s ours thebranch   # ignoring all changes from downstream 
git checkout downstream 
git merge --squash tmp    # apply changes from tmp but not as merge. 
git rev-parse upstream > .git/MERGE_HEAD #record upstream 2nd merge head 
git commit -m "rebaselined the branch from upstream" # make the commit. 
git branch -D tmp     # deleting tmp 
Powiązane problemy