Об'єднати git repo у гілку іншого репо


121

Дано repo Foo та repo Bar. Я хочу об'єднати Bar з Foo, але лише в окрему гілку, що називається baz.

git checkout -b baz <= помістіть сюди Bar Repo.

Відповіді:


230

Ви не можете об'єднати сховище у відділення . Ви можете об'єднати гілку з іншого сховища у гілку у вашому локальному сховищі. Припустимо, що у вас є два сховища, fooі barобидва розташовані у вашому поточному каталозі:

$ ls
foo bar

Перехід у fooсховище:

$ cd foo

Додайте barсховище як віддалений та отримайте його:

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

Створіть нову гілку bazв fooсховищі, базуючись на поточній гілці:

$ git checkout -b baz

Об’єднати гілку somebranchіз barсховища у поточну гілку:

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

( --allow-unrelated-historiesне потрібно до git версії 2.9)


21
оскільки git 2.9 вам, ймовірно, потрібно буде додати --allow-unrelated-historiesдо команди git merge.
Драсиль

2
Інформація про коментар від @Drasill: github.com/git/git/blob/master/Documentation/RelNotes/…
GaTechThomas

10
Я поняття не маю, що я роблю, і я справді не можу прочитати це з заповнювачами foo / bar. Чи може хтось редагувати це за допомогою реальних прикладів із реального життя (наприклад, посилань, де це доречно, та таких)?
rien333

О, це чудово. Я вважаю за краще об'єднати його у підкаталог. Не може бути інакше, чи не так? Я вважаю за краще, щоб цей крок був доданий.
macetw

1
Я отримую тони конфліктів злиття. Все-таки ви могли б змусити злитися в нову гілку?
nomadoda

41

Оновлено командами "реального життя":

Почніть зі свого каталогу репо, переконайтесь, що ваша робоча копія чиста (жодні файли не змінені, додані чи видалені).


Створіть нову гілку:

git checkout -b <my-branch>

Додайте вторинний пульт, а потім дістаньте його:

git remote add <repo-name> git@github.com:xxx/<repo-name>.git
git remote update

Об’єднайте одну з їх гілок у поточну галузь:

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


Якщо ви не знаєте, чого <their-branch>хочете, тоді йдітьmaster

Якщо ви впевнені, що хочете прийняти всі віддалені зміни та уникнути конфліктів ( замініть свої ), тоді ви можете вказати -X theirsяк варіант для git mergeостаннього кроку.

Якщо ви хочете додати його у підкаталог, то, ймовірно, вам слід скористатися підмодулями git


3

Використовуючи посібник з ларок, я зміг це зробити за допомогою SourceTree.

  1. Створено відділення в сховищі призначення
  2. Додано джерело сховища як віддалене, натиснувши кнопку Налаштування та додавши джерело сховища.
  3. Гілки обох сховищ тепер відображаються у списку філій. Я використовував інструмент злиття для об'єднання гілки з вихідного сховища до нової гілки репозиторію призначення.
  4. Вирішено будь-які конфлікти, використовуючи SourceTree або мій IDE
  5. Здійснити зміни у моєму відділенні.
  6. Видаліть джерело сховища з віддаленого списку, скориставшись кнопкою Налаштування.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.