ex) ~/myprojects/<新しく作ったgitのルート>/ でgit init して git add * したら、~/myprojects/<新しく作ったgitのルート>/AAA/ に既にgitがありますよと言われた。
これを、「AAA」のgitをなくして「新しく作ったgitのルート」のgitに統合したい。
##戦略
git subtree addを使えば他のgitをサブディレクトリにくっつけられるのでこれを使う。ただ、今回は既にサブディレクトリがある状態なので、そのままだと怒られる。
なので、一旦隣にリネームまたはどこかに移動してから行う。
###ここから下の前提
既にあったフォルダをAAAとする。新しくgit initしたルート直下にあるとする。
<新しく作ったgitのルート>にいるものとする。#cd <新しく作ったgitのルート>へのパス
git add でステージしてしまったものを綺麗にする
git addしていなければもうちょっと下からで良い。
git rm -rf --cached *
ステータスを見ると
git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
AAA/
###一旦コミットする。
git commit --allow-empty --allow-empty-message -m ""
など
既に戦略どうりにするつもりでgit add などでステージしてない場合はここからでよい。
###とりあえず名前を変える
mv AAA AAA_
###リモートに登録(XXX は作業用の適当な名前)
git remote add XXX AAA_/
確認
git remote
XXX
###履歴ごと統合
git subtree add --prefix AAA XXX master
掃除
いろいろチェックして安心したら AAA_を消しましょう。(心配ならどこかに移動させておく)
rm -rf AAA_
リモートも消します
git remote remove XXX
これであとは普通にできまっせ。
例えば
git add *
など
何か素敵なことがしたい人は、git subtree add --helpなど読む。
今回
git merge
git fetch
git read-tree
git subtree merge
は使わなかった。