Git — Скопировать существующую ветвь в одном репозитории в несуществующую ветвь во втором репозитории

#git

Вопрос:

Я работаю между двумя отдельными репозиториями, которые в основном синхронизированы. Я немного понимаю обозначения различных удаленных источников для целей git pull и git push и могу синхронизировать любые изменения в существующих ветвях с помощью этих команд.

Я сталкиваюсь с проблемами, когда в репозитории создается новая ветвь. Каков рекомендуемый способ копирования/клонирования/объединения новой ветви в репозитории A, если в репозитории B такой ветви не существует?. Я искал множество решений, и мне еще предстоит найти чистый способ достижения этой цели.

Комментарии:

1. Я не уверен, что понимаю ваш вопрос. Разве git push B <branch name> из А или git pull A <branch name> из Б не получилось бы то, чего вы хотите?

2. Как правило, идея состоит в том, чтобы иметь один репозиторий для каждого проекта. Есть ли конкретная причина, по которой вы пытаетесь иметь одинаковый код в разных репозиториях? Если вы хотите хранить свой код в двух разных местах, вам может потребоваться два источника , что можно сделать из одного хранилища.

3. У меня не может быть одного хранилища, потому что оно пересекает границы компании. Следовательно, 2 хранилища.

4. Нет. Вытяните форму <имя ветви> B, что приведет к слиянию с любой ветвью, которую я извлек из A. Я получаю конфликты слияния, которых я пытаюсь избежать. Я просто хочу, чтобы новая ветвь из репо B была скопирована в репо A вместе с ее историей.

5. Итак, более подробно: я клонировал репозиторий B, а затем создал репозиторий A на основе этого клона. Команды Push и pull в ветвях, известных обоим репозиториям, работают должным образом. Однако я не знаю, как чисто скопировать новую ветвь из одного репозитория в другой.

Ответ №1:

Вы должны иметь возможность переместить любую ветвь в удаленное хранилище, независимо от того, существует ли там уже ветвь или даже если у двух хранилищ общая история.

Это должно сделать следующее:

  1. git fetch repoA — Перенесите все ветви из удаленного хранилища A в локальную копию.
  2. git checkout repoA/my_branch — Переключитесь на ветвь в локальной копии, которую вы хотите поместить в репозиторий B. Обратите внимание, что это не создаст локальную ветвь, но фиксация repoA/my_branch будет проверена.
  3. git push repoB my_branch — Переместите текущую фиксацию из локальной копии в новую ветвь удаленного репозитория B.

Если имя ветви еще не существует в репозитории B, то это должно работать просто отлично.

Обратите внимание, что это предполагает, что вы уже добавили оба пульта дистанционного управления в свой локальный репозиторий с помощью remote add .

Комментарии:

1. Это решает мою проблему. Причина, по которой это не работало у меня раньше, в том, что я не выполнял удаленное добавление в репоБ. Спасибо.