なんかv2っぽいものをゼロスクラッチで別リポジトリに書いてたけど、v1のリポジトリにわりとスターついてるし、page viewもあるのでゼロスクラッチだけど、最終的にはv1で、もちろんコミットログを上乗せした形で公開したいな、と。
参考
方針
- repo_v2を、repo_v1のリモートに、適当な名前でpushする
- repo_v2相当のブランチを、ローカルのrepo_v1のrepoでfetchする
- repo_v1でv2本命なブランチをつくり、すべての(
.git
以外の)ファイルを削除したコミットをする
git log
で出てくるコミットのリストを、このブランチにcherry-pickで流し込む
ログ
ローカルのv2リポジトリ(kcwidget
という)
% git remote -v
origin git@github.com:otiai10/kcwidget.git (fetch)
origin git@github.com:otiai10/kcwidget.git (push)
ここに、v1リポジトリ(kanColleWidget
という)をremoteとして登録する
% git remote add v1remote git@github.com:otiai10/kanColleWidget.git
v2でのコミットログをv1リポジトリのリモートにpushする
% git push v1remote develop:wip/v2
つぎに、ローカルのv1リポジトリで、今まさにリモートのv1リポジトリにpushされたv2相当のブランチをfetchする
% cd ~/proj/chrome/kanColleWidget
% git fetch origin
remote: Counting objects: 367, done.
remote: Compressing objects: 100% (297/297), done.
remote: Total 367 (delta 131), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (367/367), 58.80 KiB | 0 bytes/s, done.
Resolving deltas: 100% (131/131), done.
From github.com:otiai10/kanColleWidget
* [new branch] wip/v2 -> origin/wip/v2
これでv2リポジトリで書いたコミットたちがv1リポジトリで参照できるようになったので、あとは順次古いものからcherry-pickしていけばよい。
まずは、v2のコミットたちを迎えるべく、土地をゼロに均す(しかし.git
は保持)コミットをしとく。
% git checkout -b v2/master
% find . -mindepth 1 -maxdepth 1 ! -name ".git" -delete
% git commit -m "(just like) starting over~♪"
いよいよ、v2相当ブランチから、cherry-pickしていく
% git log --pretty=%H --reverse origin/wip/v2 | xargs git cherry-pick
で、最後の仕上げ
% git push origin v2/master
これで、さっきまで別リポジトリで開発していたv2のコミットが、v1のコミットの上に積み重なる形で、v1リポジトリのブランチとして生まれ変わった。 (需要なさそう)
DRYな備忘録として