Git の備忘録 (1)

あるOSSプロダクト(ここではpostgres とする)の派生プロダクトのメンテナンスで、マイナーバージョンアップする際の手順を以下に備忘録として記す。

1. メンテナンスするプロダクトを用意する。

まず、git clone。

$ git clone https://github.com/XXX/postgres.git
$ cd postgres

次に対象バージョンにcheckout。

$ git checkout PG_13_STABLE

さらに作業用のブランチを作成。

$ git checkout -b dev
2. オリジナルプロダクトのリポジトリを準備する。

remoteコマンドでリポジトリを登録し、fetchでデータを取り込む。

remote コマンドでは -t オプションで必要なブランチを指定する。

$ git remote add pg13 -t REL_13_STABLE https://github.com/postgres/postgres.git
$ git fetch pg13

fetchが終わればremote リポジトリは不要なので、削除しておく。

$ git remote rm pg13
3. コミットをcherry-pickする。

git cherry-pickコマンドで、必要なコミットを取り込む。

$ git cherry-pick 8493831385814c4f22b1d5b5d8a9227a2eb82712..272d82ec6febb97ab25fd7c67e9c84f4660b16ac

競合が発生すると止まるので、git statusコマンドで競合が発生したファイルを確認し、適宜修正する。

$ git status -s

修正が終わったらgit addで修正したファイルをインデックスに追加する。

$ git add xxx/xxxx/xxx.c

cherry-pick --continueコマンドでcherry-pickを継続する。

$ git cherry-pick --continue

これを繰り返して、全てのコミットを取り込む。

4. 変更をマージする。

dev ブランチでの作業が終わったら、元ブランチに戻ってgit mergeコマンドを実行する。 ここでは全変更を一つのコミットに集約してマージする。なので--squash と --no-commitオプションを設定する。 最後にcommit する。

$ git checkout PG_13_STABLE
$ git branch
* PG_13_STABLE
  dev
$ git merge --no-commit --squash dev
$ git commit -m "updated to 13.3"