master とは別に second というブランチを作っていて、そちらが伸びてしまった。master もブランチ時点から少し commit があるが、それらの commit は廃止して、second の commit を全部 master に取り込みたい。
特に難しくなく、普通にいけた。
懸念していたのが、git rebert で打ち消したコミットで git rebase で conflict エラーになることが、幸い、そういうのなかった。 git が打ち消されたコミットをちゃんと認識して無視するようになっていたのか、たまたまうまくいったのかは不明。
git log --oneline second..master | goawk "{ print 'git revert ' $1 }" | nyagos git checkout second git rebase master git push origin second:second git checkout master git merge second git branch -d second
- second にはあるが、master にはないコミットを列挙するには git log log second..master でよい。
- --oneline オプションで「コミットハッシュ ログの1行目だけ」という結果を出力する。
- 文字列の加工といえば awk だが、Windows には Go製の awk で goawk というものがある
- goawk の system 関数は sh を呼び出そうとするので、かわりに標準出力に出して、nyagos の標準入力に食わせたが、問題なく動作
以上