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.

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)


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> git@github.com: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


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.