標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

分岐以降の master(main) のコミットを revert して、別に伸びてしまった第二ブランチのコミットを master(main) に取り込む

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 というものがある
    • ダブルクォーテーションのかわりにシングルクォーテーションが使えるので、Windows環境にやさしい
    • 文字コードは UTF8 扱いだが、今回扱うのはコミット名のハッシュなので問題なし
  • goawk の system 関数は sh を呼び出そうとするので、かわりに標準出力に出して、nyagos の標準入力に食わせたが、問題なく動作

以上