Git

コミット履歴を引き継ぎつつリポジトリを1つにまとめる方法

やりたいこと

例えば、UKをEUに取り込みたいとする。

EU/
  |--- .git(dev)

UK/
  |--- .git(dev)

↓↓↓

EU/
  |--- .git(dev)
  |--- UK/

【注意】

あくまでもローカルで管理しているリポジトリのみに使用すること。
これをやるとリモートリポジトリと整合性がとれなくなる。

手順

1. 取り込みを行うブランチを決めておく

git checkout dev

2. EU配下にUKを取り込むディレクトリを作成

cd EU
mkdir UK

3. EUに作成したディレクトリをコミット

# 空ディレクトリはコミットできないので空ファイルをUK配下に作ってコミット
touch UK/.anchor
git add -A UK
git commit -m 'UKリポジトリを取り込むディレクトリを作成'

4. UKリポジトリをリモートリポジトリとして追加

# EUのリポジトリルートに移動
cd EU
# UKリポジトリのパスを指定(絶対パスやURLでもOK、相対パスの場合はEUリポジトリルートから見たパス)
git remote add ../GS repoUK

5. ディレクトリを指定してUKを取り込む

# EUのリポジトリルートに移動
cd EU
# UKリポジトリのdevブランチを取り込む(ブランチ指定は必須)
git fetch repoUK
git merge --allow-unrelated-histories -X subtree=UK repoUK/dev

6. ブランチが複数ある場合は1~5の手順をブランチを切り替えて繰り返す

参考URL