Задача: смерджить два бранча из разных репозиториев.
Кратко – процедура выглядит так:
- переходим в каталог нового репозитория;
git checkout newbranch
– переключаемся на нужный бранч;git remote add -f old_repo [email protected]:name/oldrepo.git
– добавляем старый репозиторий какremote
для нового;git remote update
– обновляем всеremote;
git merge remotes/oldrepo/oldbranch
– выполняем слияние текущего репозитория и текущего бранча со старым репозиторием, добавленным какremote
.
Пример выполнения.
Имеется два репозитория:
- (старый репозиторий) jmplatform (бранч
develop
) - (новый репозиторий) jmplatform_live (бранч
old_repo_poland
)
Требуется jmplatform(develop
) смерджить в jmplatform_live(old_repo_poland
).
Сначала – выполним diff
.
Переходим в каталог репозитория:
$ cd ~/Work/Projects/BER.JM.Github/PLATFORM_MIGRATION/jmplatform_live
Проверяем бранч – нужен old_repo_poland
:
$ git branch current_live_wwwroot_1 master * old_repo_poland
Добавляем старый репозиторий как remote
к новому, в котором находимся:
$ git remote add -f old_repo [email protected]:/name/jmplatform.git Updating old_repo warning: no common commits remote: Counting objects: 18373, done. Receiving objects: 100% (18373/18373), 419.14 MiB | 3.89 MiB/s, done. remote: Total 18373 (delta 0), reused 0 (delta 0), pack-reused 18373 Resolving deltas: 100% (10966/10966), done. From github.com:name/jamplatform * [new branch] develop -> old_repo/develop ... * [new branch] master -> old_repo/master * [new branch] playground -> old_repo/playground * [new branch] release -> old_repo/release
Обновляем все remote
:
$ git remote update Fetching origin Fetching old_repo
Сравниваем develop
из старого репозитория и old_repo_poland
нового:
$ git diff old_repo_poland remotes/old_repo/develop\ ...
Если всё ОК – выполняем слияние:
$ git merge remotes/old_repo/develop warning: Cannot merge binary files: server/JMPlatform_Soln/JMPlatform.CMS/Bin/TweetSharp.dll (HEAD vs. remotes/old_repo/develop) ... Auto-merging server/JMPlatform_Soln/JMPlatform.CMS/config/ExamineSettings.config CONFLICT (add/add): Merge conflict in server/JMPlatform_Soln/JMPlatform.CMS/config/ExamineSettings.config ... Automatic merge failed; fix conflicts and then commit the result.
Исправляем конфикт в файле server/JMPlatform_Soln/JMPlatform.CMS/config/ExamineSettings.config
и коммитим его:
$ git add server/JMPlatform_Soln/JMPlatform.CMS/config/ExamineSettings.config && git commit -m "search updates"
Проверяем статус:
$ git status On branch old_repo_poland nothing to commit, working directory clean
Пушим:
$ git push -u origin old_repo_poland Counting objects: 10561, done. Delta compression using up to 4 threads. Compressing objects: 100% (2391/2391), done. Writing objects: 100% (10103/10103), 22.65 MiB | 4.56 MiB/s, done. Total 10103 (delta 7858), reused 9867 (delta 7667) remote: Resolving deltas: 100% (7858/7858), completed with 327 local objects. To [email protected]:name/jmplatform_live.git * [new branch] old_repo_poland -> old_repo_poland Branch old_repo_poland set up to track remote branch old_repo_poland from origin.
Удаляем старый репозиторий из remote
нового:
$ git remote rm old_repo
Готово.