Połącz repozytorium git z gałęzią innego repozytorium

122

Podano repozytorium Foo i pasek repozytorium. Chcę połączyć Bar z Foo, ale tylko w oddzielną gałąź o nazwie baz.

git checkout -b baz <= umieść repozytorium Bar tutaj.

Milktrader
źródło

Odpowiedzi:

232

Nie możesz scalić repozytorium w gałąź . Możesz scalić gałąź z innego repozytorium w gałąź w swoim lokalnym repozytorium. Zakładając, że masz dwa repozytoria fooi baroba znajdują się w Twoim bieżącym katalogu:

$ ls
foo bar

Przejdź do foorepozytorium:

$ cd foo

Dodaj barrepozytorium jako zdalne i pobierz je:

$ git remote add bar ../bar
$ git remote update

Utwórz nową gałąź bazw foorepozytorium na podstawie tego, czym jest twoja obecna gałąź:

$ git checkout -b baz

Scal gałąź somebranchz barrepozytorium do bieżącej gałęzi:

$ git merge --allow-unrelated-histories bar/somebranch

( --allow-unrelated-historiesnie jest wymagane przed wersją git 2.9)

larsks
źródło
21
od wersji 2.9 git prawdopodobnie będziesz musiał dodać --allow-unrelated-historiesdo polecenia git merge.
Drasill
2
Informacje na temat komentarza @Drasill: github.com/git/git/blob/master/Documentation/RelNotes/…
GaTechThomas
10
Nie mam pojęcia, co robię i nie mogę tego odczytać za pomocą symboli zastępczych foo / bar. Czy ktokolwiek może edytować to za pomocą rzeczywistych przykładów z życia (takich jak linki, gdzie jest to stosowne itp.)?
rien333
Ooh, to jest świetne. Wolałbym scalić go w podkatalogu. Nie może być aż tak inaczej, prawda? Wolałbym dodać ten krok.
macetw
1
Dostaję mnóstwo konfliktów podczas łączenia. W każdym razie mógłbyś wymusić połączenie się w nową gałąź?
nomadoda
41

Zaktualizowano za pomocą poleceń „z życia wziętych”:

Zacznij od katalogu repozytorium, upewnij się, że kopia robocza jest czysta (żadne pliki nie zostały zmienione, dodane ani usunięte).


Utwórz nową gałąź:

git checkout -b <my-branch>

Dodaj dodatkowego pilota, a następnie pobierz go:

git remote add <repo-name> [email protected]:xxx/<repo-name>.git
git remote update

Połącz jeden z ich oddziałów w bieżącym oddziale:

git merge <repo-name>/<their-branch>


Jeśli nie wiesz, czego <their-branch>chcesz, to idźmaster

Jeśli jesteś pewien, że chcesz zaakceptować wszystkie zdalne zmiany i uniknąć konfliktów ( nadpisać swoje ), możesz określić -X theirsjako opcję git mergew ostatnim kroku.

Jeśli chcesz dodać go do podkatalogu, prawdopodobnie powinieneś użyć podmodułów git

vinzdef
źródło
3

Korzystając z przewodnika od Larsks, mogłem to zrobić za pomocą SourceTree.

  1. Utworzono gałąź w repozytorium docelowym
  2. Dodano repozytorium źródłowe jako zdalne, naciskając przycisk Ustawienia i dodając repozytorium źródłowe.
  3. Gałęzie z obu repozytoriów są teraz wyświetlane na liście gałęzi. Użyłem narzędzia scalania, aby scalić gałąź z repozytorium źródłowego do gałęzi mojego nowego repozytorium docelowego.
  4. Rozwiązano wszelkie konflikty za pomocą SourceTree lub mojego IDE
  5. Zatwierdź zmiany w moim oddziale.
  6. Usuń repozytorium źródłowe z listy zdalnej za pomocą przycisku Ustawienia.
TheBigSot
źródło