なんかv2っぽいものをゼロスクラッチで別リポジトリに書いてたけど、v1のリポジトリにわりとスターついてるし、page viewもあるのでゼロスクラッチだけど、最終的にはv1で、もちろんコミットログを上乗せした形で公開したいな、と。
参考
- Is it possible to cherry-pick a commit from another git repository? - Stack Overflow
- Git log to get commits only for a specific branch - Stack Overflow
- git logでコミットハッシュだけほしい - DRYな備忘録
- git - Display gitk log in reverse order - Stack Overflow
- In a Linux shell how can I process each line of a multiline string? - Stack Overflow
- zsh - Remove all but one ( or more ) kind of filetype - Unix & Linux Stack Exchange
方針
- 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な備忘録として