Как переместить новые коммиты из старого репозитория в новый - PullRequest
0 голосов
/ 31 января 2019

Так что я сделал глупую ошибку.Я недавно перенес свои личные репозитории с BitBucket на GitHub, чтобы свести все мои данные под одной учетной записью (простота).Удалил локальные репозитории BitBucket и клонировал новые репозитории GitHub на всех моих компьютерах.К сожалению, я забыл сделать то же самое с сервером, на котором я работаю.

Моя текущая ситуация такова.После миграции у меня появились новые коммиты как на репозитории GitHub, так и на репозитории BitBucket.Я хочу переместить эти коммиты BitBucket в репозиторий GitHub, сохраняя при этом новые коммиты GitHub.Было бы хорошо, если бы время коммитов BitBucket также было сохранено, но я мог бы быть в порядке без этого.

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

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

То, как я это сделал, больше похоже на Чепнера, чем на Тим, но я расскажу о том, что я на самом деле делал.Обратите внимание, что, как сказал Чепнер, это, вероятно, будет работать с любой комбинацией удаленных сервисов git, поэтому, если вы не используете BitBucket или GitHub, просто сделайте то же самое с URL-адресами других удаленных сервисов git.

Допущениядля этих шагов (которые были верны в моей ситуации):

  • локальный репозиторий BitBucket обновлен со всеми его последними коммитами

  • в репозитории была только основная ветвь (вообще не было подветви)

  • новый GitHub фиксирует отредактированные файлы, отличные от новых BitBucket, (поэтому никакой вероятности конфликтов слияния нет).

Смотрите "Что делать по-другому", чтобы узнать, как справиться с этим, если эти предположения не соответствуют действительности.

tl; dr ДобавленоGitHub, удаленный в локальный репозиторий BitBucket, извлек коммиты GitHub и перенес локальное репо в GitHub.

Точный шаг за шагом из того, что я сделал:

  1. Перейти в локальный репозиторий BitBucket.

  2. Добавить пульт в точкуна репозиторий GitHub.

    git remote add github <url GitHub repo>

    Это можно проверить с помощью git remote -v.Это выведет все удаленные URL, которые используются в этом локальном хранилище.Должно быть четыре записи, две выборки / передачи для BitBucket, две выборки / передачи для GitHub:

    $ git remote -v origin <url BitBucket> (fetch) origin <url BitBucket> (push) github <url GitHub> (fetch) github <url GitHub> (push)

  3. Выборка коммитов GitHub.Я сделал это:

    git fetch github

    Теперь в вашем локальном репозитории есть все коммиты из репозитория GitHub.

  4. Нажмите коммиты влокальный репозиторий в удаленном репозитории GitHub

    git push github master

    Теперь пульт GitHub имеет свои оригинальные коммиты (с момента их получения на шаге 3) и коммиты BitBucket (которые присутствовали в локальном репозитории)репозиторий для начала).

  5. Удалите удаленный URL BitBucket из репозитория ...

    git remote remove origin

    ... и переименуйтеУдаленный URL GitHub на origin:

    git remote rename github origin

Теперь все в порядке с миром.

Что делать по-другому:

  1. Use git fetch --all

    Он будет получать новые коммиты с каждого удаленного URL, который вы сохранили.Это заменило бы первое предположение, которое я использовал выше (что репозиторий BitBucket имел все свои последние коммиты).

  2. У вас есть несколько веток для передачи.

    Из моего понимания, команда git fetch будет сбрасывать коммиты из всех ветвей на шаге 3.

    Чтобы поднять результаты обратно, из документации вы можете сделать git push github --all, чтобы отправить изменения, внесенные в каждую ветку.

  3. У вас есть конфликтующие коммиты

    Вам, вероятно, придется сделать git merge перед нажатием.

0 голосов
/ 31 января 2019

Чтобы сохранить старые коммиты (автор, дата, время и т. Д.), Вы должны объединить коммит BB в GitHUB.Это можно сделать с помощью локального репо, клонированного из GitHub.Затем добавьте пульт дистанционного управления, чтобы указать на ваше репозиторий BB, и выполните команду «git fetch --all».Теперь у вас есть все коммиты от BB в том же (локальном) репо, что и коммиты GitHub.Затем создайте (и извлеките) ветку, в которую вы хотите, чтобы ББ совершил слияние.Эта ветка будет ветвиться с коммитом GitHUB.Затем вы можете выполнить «git merge», чтобы объединить новые коммиты BB в новую ветку GitHub.Затем удалите пульт дистанционного управления BB и затем перенесите новую ветку в репозиторий GitHUB.

Если объединение не сработает, вы можете использовать cherry-pick, но это не сохраняет коммиты BB (автор, дата / время)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...