大前提として
2つのリポジトリのホスティングサービスで全く同じプロジェクトを管理する場合になります
Gitにはgit remote
というサブコマンドがあり、
リモートリポジトリを選択することが可能です。
とりあえずgit remote add [name] [URL]
で登録しましょう。
この辺の情報はproject-name/.git/config
ファイルにテキストデータとして保存されているので
使っているテキストエディタで開いて確認すれば現在どういう風になっているかが確認出来ます。
git remote
の1つ目のデフォルト名はorigin
です。
なのでgit clone プロジェクトURL
でGitHubかなんかから落として来た時、
GitHubのリモート名はorigin
になっているはずです。
そのへんもproject-name/.git/config
ファイルに記載されています。
さて、質問文の本題に切り込みましょう。
要件;gitlabのリポジトリのmasterブランチの変更をAWS codecommitのdevブランチに取り込みたい
とりあえずgit remote add [name] [URL]
で2つのリポジトリを登録します。
そしてgit fetch
コマンドでリポートブランチとローカルの同期を行います。
その後、git branch -a
という風に全てを示す-a
オプション付きで実行すると
両方のブランチが表示されているはずです。
要件をコマンドの羅列にすると下記になるでしょう。
bash
1$ git remote add gitlab [URL]
2$ git remote add codecommit [URL]
3
4# 作業する前にfetchでリモートリポジトリを更新
5$ git fetch --all
6
7# devブランチを消したくない想定
8# tmpブランチを作成して逃し、現在のdevブランチを削除
9$ git checkout dev
10$ git checkout -b tmp
11$ git branch -D dev
12
13# 作業対象のcodecommit/devに移動
14$ git checkout codecommit/dev
15
16# gitlabのマスターをrebaseモードで取り込む
17# (別にこの辺はmergeでよしなに合成しても良いが、rebaseは下に潜り込ませて正史を書き換えてからそれに対する修正とする感じ)
18$ git rebase gitlab/master
19
20# rebaseで下のコミット履歴を編集したので、フォースオプションで無理やり上書きする必要がある
21$ git push -f codecommit dev
22
23# 退避させたdevブランチを復活させる
24$ git checkout tmp
25$ git branch -D dev
26$ git checkout -b dev
27$ git branch -d tmp